rrenkert@5912: package org.dive4elements.river.exports; rrenkert@5912: rrenkert@5912: import java.io.File; rrenkert@5912: import java.io.FileFilter; rrenkert@5912: import java.io.IOException; rrenkert@5912: import java.io.OutputStream; rrenkert@5912: rrenkert@5912: import org.apache.log4j.Logger; rrenkert@5912: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; rrenkert@5912: import org.dive4elements.artifactdatabase.state.Settings; rrenkert@5912: import org.dive4elements.artifacts.Artifact; rrenkert@5912: import org.dive4elements.artifacts.CallContext; rrenkert@5912: import org.dive4elements.artifacts.common.ArtifactNamespaceContext; rrenkert@5912: import org.dive4elements.artifacts.common.utils.FileTools; rrenkert@5912: import org.dive4elements.artifacts.common.utils.XMLUtils; rrenkert@5912: import org.dive4elements.river.collections.D4EArtifactCollection; teichmann@6905: import org.dive4elements.river.themes.ThemeDocument; rrenkert@5912: import org.w3c.dom.Document; teichmann@7037: import org.w3c.dom.Element; rrenkert@5912: rrenkert@5912: rrenkert@5912: public class ShapeExporter implements OutGenerator rrenkert@5912: { rrenkert@5912: private static final String XPATH_FACET = "/art:action/@art:type"; rrenkert@5912: private static Logger logger = Logger.getLogger(ShapeExporter.class); rrenkert@5912: private Artifact master; rrenkert@5912: private Document request; rrenkert@5912: private OutputStream out; rrenkert@5912: private CallContext context; rrenkert@5912: private D4EArtifactCollection collection; rrenkert@5912: private String facet; rrenkert@5912: private File dir; teichmann@7077: private String outName; rrenkert@5912: rrenkert@5912: @Override teichmann@7087: public void setup(Object config) { teichmann@7037: logger.debug("ShapeExporter.setup"); teichmann@7037: } teichmann@7037: teichmann@7037: @Override teichmann@7077: public void init(String outName, Document request, OutputStream out, CallContext context) { teichmann@7077: this.outName = outName; rrenkert@5912: this.request = request; rrenkert@5912: this.out = out; rrenkert@5912: this.context = context; rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override rrenkert@5912: public void setMasterArtifact(Artifact master) { rrenkert@5912: this.master = master; rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override rrenkert@5912: public void setCollection(D4EArtifactCollection collection) { rrenkert@5912: this.collection = collection; rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override teichmann@6905: public void doOut(ArtifactAndFacet bundle, ThemeDocument attr, boolean visible) { rrenkert@5912: String name = bundle.getFacetName(); rrenkert@5912: rrenkert@5912: if (!isFacetValid(name)) { rrenkert@5912: logger.debug("Facet '" + name + "' is not valid for this exporter!"); rrenkert@5912: return; rrenkert@5912: } rrenkert@5912: rrenkert@5912: addData(bundle.getData(context)); rrenkert@5912: } rrenkert@5912: rrenkert@5912: private void addData(Object data) { rrenkert@5912: if (data instanceof File) { rrenkert@5912: this.dir = (File)data; rrenkert@5912: } rrenkert@5912: } rrenkert@5912: rrenkert@5912: private boolean isFacetValid(String name) { rrenkert@5912: String thisFacet = getFacet(); rrenkert@5912: if (thisFacet == null || thisFacet.length() == 0) { rrenkert@5912: return false; rrenkert@5912: } rrenkert@5912: else if (facet == null || facet.length() == 0) { rrenkert@5912: return false; rrenkert@5912: } rrenkert@5912: else { rrenkert@5912: return thisFacet.equals(facet); rrenkert@5912: } rrenkert@5912: } rrenkert@5912: rrenkert@5912: rrenkert@5912: /** rrenkert@5912: * Returns the name of the desired facet. rrenkert@5912: * rrenkert@5912: * @return the name of the desired facet. rrenkert@5912: */ rrenkert@5912: protected String getFacet() { rrenkert@5912: if (facet == null) { rrenkert@5912: facet = getFacetFromRequest(); rrenkert@5912: } rrenkert@5912: rrenkert@5912: return facet; rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override rrenkert@5912: public void generate() throws IOException { rrenkert@5912: FileFilter filter = new FileFilter() { rrenkert@5912: @Override rrenkert@5912: public boolean accept(File pathname) { rrenkert@5912: if (pathname.getName().startsWith("wsplgen") && rrenkert@5912: !pathname.getName().endsWith(".par")) { rrenkert@5912: return true; rrenkert@5912: } rrenkert@5912: else { rrenkert@5912: return false; rrenkert@5912: } rrenkert@5912: } rrenkert@5912: }; rrenkert@5912: FileTools.createZipArchive(this.dir, out, filter); rrenkert@5912: out.close(); rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override rrenkert@5912: public void setSettings(Settings settings) { rrenkert@5912: //Do nothing. rrenkert@5912: } rrenkert@5912: rrenkert@5912: @Override rrenkert@5912: public Settings getSettings() { rrenkert@5912: // This exporter has no settings. rrenkert@5912: return null; rrenkert@5912: } rrenkert@5912: rrenkert@5912: /** rrenkert@5912: * Extracts the name of the requested facet from request document. rrenkert@5912: * rrenkert@5912: * @return the name of the requested facet. rrenkert@5912: */ rrenkert@5912: protected String getFacetFromRequest() { rrenkert@5912: return XMLUtils.xpathString( rrenkert@5912: request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE); rrenkert@5912: } teichmann@5919: }