Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java')
-rw-r--r--org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java250
1 files changed, 250 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java b/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java
new file mode 100644
index 000000000..15223f370
--- /dev/null
+++ b/org.eclipse.mylyn.docs.epub.ant.core/src/org/eclipse/mylyn/docs/epub/ant/core/EpubTask.java
@@ -0,0 +1,250 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Torkild U. Resheim.
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: Torkild U. Resheim - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.epub.ant.core;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.eclipse.mylyn.docs.epub.core.EPUB;
+import org.eclipse.mylyn.docs.epub.core.OPS2Publication;
+import org.eclipse.mylyn.docs.epub.core.OPSPublication;
+import org.eclipse.mylyn.docs.epub.opf.Role;
+import org.eclipse.mylyn.docs.epub.opf.Type;
+
+/**
+ * Assemble a new EPUB.
+ *
+ *
+ * @author Torkild U. Resheim
+ * @ant.task name="epub" category="epub"
+ */
+public class EpubTask extends Task {
+
+ private OPSPublication ops = null;
+
+ private ArrayList<FileSetType> filesets = null;
+
+ private TocType toc = null;
+
+ private File workingFolder;
+
+ private File epubFile;
+
+ public EpubTask() {
+ super();
+ try {
+ ops = new OPS2Publication();
+ filesets = new ArrayList<FileSetType>();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void addConfiguredContributor(ContributorType item) {
+ if (item.role == null) {
+ ops.addContributor(item.id, item.lang, item.name, null, item.fileAs);
+ } else {
+ ops.addContributor(item.id, item.lang, item.name, Role.get(item.role), item.fileAs);
+ }
+ }
+
+ public void addConfiguredCover(CoverType item) {
+ ops.setCover(new File(item.image), item.value);
+ }
+
+ public void addConfiguredCoverage(CoverageType coverage) {
+ ops.addCoverage(coverage.id, coverage.lang, coverage.text);
+ }
+
+ public void addConfiguredCreator(CreatorType item) {
+ if (item.role == null) {
+ ops.addCreator(item.id, item.lang, item.name, null, item.fileAs);
+ } else {
+ ops.addCreator(item.id, item.lang, item.name, Role.get(item.role), item.fileAs);
+ }
+ }
+
+ public void addConfiguredDate(DateType item) {
+ ops.addDate(item.id, item.date, item.event);
+ }
+
+ /**
+ * The FileSet sub-element is used to add EPUB artifacts that are not a part
+ * of the main text. This can be graphical items and styling (CSS).
+ *
+ * @param fs
+ * the fileset to add
+ */
+ public void addConfiguredFileSet(FileSetType fs) {
+ filesets.add(fs);
+ }
+
+ public void addConfiguredFormat(FormatType format) {
+ ops.addFormat(format.id, format.text);
+ }
+
+ /**
+ * @ant.required
+ */
+ public void addConfiguredIdentifier(IdentifierType identifier) {
+ ops.addIdentifier(identifier.id, identifier.scheme, identifier.value);
+ }
+
+ /**
+ * @ant.required
+ */
+ public void addConfiguredItem(ItemType item) {
+ ops.addItem(item.id, item.lang, item.file, item.dest, item.type, item.spine, item.linear, item.noToc);
+ }
+
+ /**
+ * @ant.required
+ */
+ public void addConfiguredLanguage(LanguageType language) {
+ ops.addLanguage(language.id, language.code);
+ }
+
+ public void addConfiguredMeta(MetaType item) {
+ ops.addMeta(item.name, item.content);
+ }
+
+ public void addConfiguredPublisher(PublisherType publisher) {
+ ops.addPublisher(publisher.id, publisher.lang, publisher.text);
+ }
+
+ public void addConfiguredReference(ReferenceType reference) {
+ Type type = Type.get(reference.type);
+ if (type == null) {
+ throw new BuildException("Unknown reference type " + reference.type);
+ }
+ ops.addReference(reference.href, reference.title, type);
+ }
+
+ public void addConfiguredRelation(RelationType relation) {
+ ops.addRelation(relation.id, relation.lang, relation.text);
+ }
+
+ public void addConfiguredRights(RightsType rights) {
+ ops.addRights(rights.id, rights.lang, rights.text);
+ }
+
+ public void addConfiguredSource(SourceType source) {
+ ops.addSource(source.id, source.lang, source.text);
+ }
+
+ public void addConfiguredSubject(SubjectType subject) {
+ ops.addSubject(subject.id, subject.lang, subject.text);
+ }
+
+ /**
+ * @ant.required
+ */
+ public void addConfiguredTitle(TitleType title) {
+ ops.addTitle(title.id, title.lang, title.text);
+ }
+
+ public void addConfiguredToc(TocType toc) {
+ if (this.toc != null) {
+ throw new BuildException("Only one table of contents (toc) declaration is allowed.");
+ }
+ this.toc = toc;
+ }
+
+ public void addConfiguredType(org.eclipse.mylyn.docs.epub.ant.core.TypeType type) {
+ ops.addType(type.id, type.text);
+ }
+
+ private void addFilesets() {
+ for (FileSetType fs : filesets) {
+ final File fsDir = fs.getDir(getProject());
+ if (fsDir == null) {
+ throw new BuildException("File or Resource without directory or file specified");
+ } else if (!fsDir.isDirectory()) {
+ throw new BuildException("Directory does not exist:" + fsDir);
+ }
+ DirectoryScanner ds = fs.getDirectoryScanner(getProject());
+ String[] includedFiles = ds.getIncludedFiles();
+ for (int i = 0; i < includedFiles.length; i++) {
+ String filename = includedFiles[i].replace('\\', '/');
+ filename = filename.substring(filename.lastIndexOf("/") + 1);
+ File base = ds.getBasedir();
+ File found = new File(base, includedFiles[i]);
+ ops.addItem(null, fs.lang, found, fs.dest, null, false, true, false);
+ }
+
+ }
+
+ }
+
+ @Override
+ public void execute() throws BuildException {
+
+ // When running from within Eclipse, the project may not have been set
+ if (getProject() == null) {
+ Project project = new Project();
+ setProject(project);
+ }
+
+ validate();
+ addFilesets();
+ if (toc != null) {
+ if (toc.generate) {
+ ops.setGenerateToc(true);
+ } else if (toc.file != null) {
+ ops.setTableOfContents(toc.file);
+ }
+ }
+ try {
+ EPUB epub = new EPUB();
+ epub.add(ops);
+ if (workingFolder == null) {
+ epub.pack(epubFile);
+ } else {
+ epub.pack(epubFile, workingFolder);
+ }
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ /**
+ * @ant.not-required Automatically add referenced resources.
+ */
+ public void setIncludeReferenced(boolean automatic) {
+ ops.setIncludeReferencedResources(automatic);
+ }
+
+ /**
+ *
+ *
+ * @param file
+ * path to the generated EPUB file.
+ */
+ public void setFile(File file) {
+ this.epubFile = file;
+ }
+
+ public void setIdentifierId(String identifierId) {
+ ops.setIdentifierId(identifierId);
+ }
+
+ public void setWorkingFolder(File workingFolder) {
+ this.workingFolder = workingFolder;
+ }
+
+ private void validate() {
+ }
+
+}

Back to the top