/*
* Copyright 2011 Marek Pilecky
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.mefi.jkuuza.model;
import java.net.SocketTimeoutException;
import org.ektorp.CouchDbConnector;
/**
*
* @author Marek Pilecky
*/
public class CrawledPageController {
private CouchDbConnector connector;
private PageRepository pageRepository;
private BodyContentRepository contentRepository;
public CrawledPageController(CouchDbConnector connector) {
this.connector = connector;
this.pageRepository = new PageRepository(connector);
this.contentRepository = new BodyContentRepository(connector);
}
/**
* Saves Page into db. If old record already exists in db, is overwriten by new values.
*
* @param page
*/
public void save(Page page) throws SocketTimeoutException {
try {
if (pageRepository.contains(page.getId())) {
page.setRevision(pageRepository.get(page.getId()).getRevision());
pageRepository.update(page);
} else {
page.setId(createId(page));
pageRepository.add(page);
}
} catch (Exception ex) {
throw new SocketTimeoutException();
}
}
/**
* Saves Page and its BodyContent (if is unique) into db. BodyContent _id depends on MD5 hash of content,
* so only chagned content is saved. If Page already exists in db, is overwriten by new values.
*
* @param page
* @param content
*/
public void save(Page page, BodyContent content) throws SocketTimeoutException {
save(page);
String contentId = BodyContent.createId(content.getUrl(), content.getHash());
try {
if (!contentRepository.contains(contentId)) {
content.setId(contentId);
contentRepository.add(content);
}
} catch (Exception ex) {
throw new SocketTimeoutException();
}
}
public void delete(Page page) {
}
/**
* Returns Page id calculated from instance parameters.
*
* @param page
* @return
*/
private String createId(Page page) {
return page.getUrl();
}
}