view src/nabble/model/export/AbstractImportImpl.java @ 47:72765b66e2c3

remove mailing list code
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 18 Jun 2021 17:44:24 -0600
parents 7ecd1a4ef557
children
line wrap: on
line source

package nabble.model.export;

import fschmidt.db.SQLRuntimeException;
import fschmidt.util.java.ProxyIntoThread;
import nabble.model.ModelException;
import nabble.model.Node;
import nabble.model.Site;
import nabble.view.lib.Jtp;
import nabble.view.web.template.UrlMapperNamespace;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public abstract class AbstractImportImpl implements Import {

	private static final Logger logger = LoggerFactory.getLogger(AbstractImportImpl.class);

	final Site site;
	private ProxyIntoThread pit = null;
	private boolean isStarted = false;
	private boolean isClosed = false;

	AbstractImportImpl(Site site) {
		this.site = site;
	}

	protected abstract String createNode(NodeData data) throws ModelException;
	protected abstract void start();
	protected abstract void end();

	void setProxy(ProxyIntoThread<Import> pit) {
		this.pit = pit;
	}
/*
	public Pattern[] getRedirectUrlPatterns() {
		Pattern rootPtn = Pattern.compile("http://.+\\.(\\d+)\\..+/");
		Pattern appPtn = Pattern.compile("-f(\\d+)\\.html$");
		Pattern postPtn = Pattern.compile("-td(\\d+)\\.html$");
		Pattern postPermalinkPtn = Pattern.compile("-tp\\d+p(\\d+)\\.html$");
		return new Pattern[] { appPtn, postPtn, postPermalinkPtn, rootPtn };
	}
*/
	private static final Pattern[] redirectUrlPatterns =  new Pattern[]{
		Pattern.compile("-td(\\d+)\\.html$"),  // post
		Pattern.compile("-tp(\\d+)\\.html$"),  // topic permalink
		Pattern.compile("-tp\\d+p(\\d+)\\.html$"),  // post permalink
	};

	public long getNodeId(String permalink) throws BadLink {
		Node node = UrlMapperNamespace.getNodeFromUrl(permalink);
		if( node != null )
			return node.getId();
		for (Pattern p : redirectUrlPatterns) {
			Matcher m = p.matcher(permalink);
			if (m.find()) {
				String s = m.group(m.groupCount());
				return Long.parseLong(s);
			}
		}
		throw new BadLink();
	}

	public String importNode(NodeData data) {
		if( isClosed )
			throw new RuntimeException("Closed");
		if( !isStarted ) {
			start();
			isStarted = true;
		}
		try {
			return createNode(data);
		} catch(ModelException e) {
			logger.error("node "+data.exportId + " / data.exportId=" + data.exportId, e);
			throw new RuntimeException(e.toString());
		} catch(SQLRuntimeException e) {
			logger.error("node "+data.exportId + " / data.exportId=" + data.exportId, e);
			throw new RuntimeException(e.toString());
		}
	}

	Node getNode(long nodeId) {
		return site.getNode(nodeId);
	}

	public void close() {
		isClosed = true;
		if (pit != null) {
			pit.stop();
			pit = null;
		}
		end();
	}

	@Override protected void finalize() throws Throwable {
		try {
			if( !isClosed ) {
				logger.error("import not closed");
				close();
			}
		} finally {
			super.finalize();
		}
	}

}