1 16 package org.outerj.daisy.doctaskrunner.commonimpl; 17 18 import org.outerj.daisy.doctaskrunner.SimpleActionsTaskSpecification; 19 import org.outerj.daisy.doctaskrunner.TaskException; 20 import org.outerj.daisy.repository.Repository; 21 import org.outerj.daisy.repository.RepositoryException; 22 import org.outerj.daisy.repository.variant.VariantManager; 23 import org.outerx.daisy.x10Doctaskrunner.TaskDescriptionDocument; 24 import org.apache.xmlbeans.XmlObject; 25 26 import java.util.List ; 27 import java.util.ArrayList ; 28 import java.util.Iterator ; 29 30 public class SimpleActionsTaskSpecificationImpl implements SimpleActionsTaskSpecification { 31 private String description; 32 private boolean stopOnFirstError; 33 private Repository repository; 34 private boolean validateOnSave; 35 private List actions = new ArrayList (); 36 37 public SimpleActionsTaskSpecificationImpl(String description, boolean stopOnFirstError, Repository repository) { 38 if (description == null) 39 throw new IllegalArgumentException ("description parameter is null"); 40 41 this.description = description; 42 this.stopOnFirstError = stopOnFirstError; 43 this.repository = repository; 44 } 45 public void setValidateOnSave(boolean validateOnSave) { 46 this.validateOnSave = validateOnSave; 47 } 48 49 public void addCreateVariant(String startVersion, String newBranch, String newLanguage) { 50 actions.add(new CreateVariantAction(startVersion, newBranch, newLanguage)); 51 } 52 53 public void addDeleteVariant() { 54 actions.add(new DeleteVariantAction()); 55 } 56 57 public void addAddToCollection(String collection) { 58 actions.add(new AddToCollectionAction(collection)); 59 } 60 61 public void addRemoveFromCollection(String collection) { 62 actions.add(new RemoveFromCollectionAction(collection)); 63 } 64 65 public String getDescription() { 66 return description; 67 } 68 69 public String getScript() throws RepositoryException { 70 StringBuffer buffer = new StringBuffer (); 71 buffer.append("var document = null;\n"); 72 Iterator actionsIt = actions.iterator(); 73 while (actionsIt.hasNext()) { 74 SimpleAction action = (SimpleAction)actionsIt.next(); 75 action.addScriptCode(buffer); 76 } 77 buffer.append("\n\nif (document != null)\n document.save(").append(validateOnSave).append(");"); 78 return buffer.toString(); 79 } 80 81 public String getScriptLanguage() { 82 return "javascript"; 83 } 84 85 public boolean stopOnFirstError() { 86 return stopOnFirstError; 87 } 88 89 public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 90 simpleActionsXml.setValidateOnSave(validateOnSave); 91 Iterator actionsIt = actions.iterator(); 92 while (actionsIt.hasNext()) { 93 SimpleAction action = (SimpleAction)actionsIt.next(); 94 action.addXml(simpleActionsXml); 95 } 96 } 97 98 public void fromXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 99 this.validateOnSave = simpleActionsXml.getValidateOnSave(); 100 XmlObject[] actionsXml = simpleActionsXml.selectPath("*"); 101 for (int i = 0; i < actionsXml.length; i++) { 102 XmlObject actionXml = actionsXml[i]; 103 if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant) { 104 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant createVariantXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant)actionXml; 105 addCreateVariant(createVariantXml.getStartVersion(), createVariantXml.getNewBranch(), createVariantXml.getNewLanguage()); 106 } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.DeleteVariant) { 107 addDeleteVariant(); 108 } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection) { 109 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection addToCollectionXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection)actionXml; 110 addAddToCollection(addToCollectionXml.getCollection()); 111 } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection) { 112 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection removeFromCollectionXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection)actionXml; 113 addRemoveFromCollection(removeFromCollectionXml.getCollection()); 114 } else { 115 throw new RuntimeException ("Unrecognized simple action: " + actionXml); 116 } 117 } 118 } 119 120 interface SimpleAction { 121 void addScriptCode(StringBuffer buffer) throws RepositoryException ; 122 void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml); 123 } 124 125 class CreateVariantAction implements SimpleAction { 126 private String startVersion; 127 private String newBranch; 128 private String newLanguage; 129 130 public CreateVariantAction(String startVersion, String newBranch, String newLanguage) { 131 this.startVersion = startVersion; 132 this.newBranch = newBranch; 133 this.newLanguage = newLanguage; 134 } 135 136 public void addScriptCode(StringBuffer buffer) throws RepositoryException { 137 VariantManager variantManager = repository.getVariantManager(); 138 long branchId = variantManager.getBranch(newBranch, false).getId(); 139 long languageId = variantManager.getLanguage(newLanguage, false).getId(); 140 long startVersionId; 141 if (startVersion.equalsIgnoreCase("live")) { 142 startVersionId = -2; 143 } else if (startVersion.equalsIgnoreCase("last")) { 144 startVersionId = -1; 145 } else { 146 try { 147 startVersionId = Long.parseLong(startVersion); 148 } catch (NumberFormatException e) { 149 throw new TaskException("Invalid version: " + startVersion); 150 } 151 } 152 153 buffer.append("\n"); 154 buffer.append("repository.createVariant(variantKey.getDocumentId(), variantKey.getBranchId(), variantKey.getLanguageId(), "); 155 buffer.append(startVersionId); 156 buffer.append(", "); 157 buffer.append(branchId); 158 buffer.append(", "); 159 buffer.append(languageId); 160 buffer.append(", true);\n"); 161 } 162 163 public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 164 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant createVariant = simpleActionsXml.addNewCreateVariant(); 165 createVariant.setStartVersion(startVersion); 166 createVariant.setNewBranch(newBranch); 167 createVariant.setNewLanguage(newLanguage); 168 } 169 } 170 171 class DeleteVariantAction implements SimpleAction { 172 public void addScriptCode(StringBuffer buffer) throws RepositoryException { 173 buffer.append("\nrepository.deleteVariant(variantKey);\n"); 174 } 175 176 public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 177 simpleActionsXml.addNewDeleteVariant(); 178 } 179 } 180 181 class AddToCollectionAction implements SimpleAction { 182 private final String collection; 183 184 public AddToCollectionAction(String collection) { 185 this.collection = collection; 186 } 187 188 public void addScriptCode(StringBuffer buffer) throws RepositoryException { 189 long collectionId = repository.getCollectionManager().getCollection(collection, false).getId(); 190 buffer.append("\n"); 191 buffer.append(LAZY_LOAD_DOCUMENT); 192 buffer.append("\nvar collection = repository.getCollectionManager().getCollection(").append(collectionId).append(", false);"); 193 buffer.append("\ndocument.addToCollection(collection);"); 194 buffer.append("\n"); 195 } 196 197 public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 198 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection addToCollectionXml = simpleActionsXml.addNewAddToCollection(); 199 addToCollectionXml.setCollection(collection); 200 } 201 } 202 203 class RemoveFromCollectionAction implements SimpleAction { 204 private final String collection; 205 206 public RemoveFromCollectionAction(String collection) { 207 this.collection = collection; 208 } 209 210 public void addScriptCode(StringBuffer buffer) throws RepositoryException { 211 long collectionId = repository.getCollectionManager().getCollection(collection, false).getId(); 212 buffer.append("\n"); 213 buffer.append(LAZY_LOAD_DOCUMENT); 214 buffer.append("\nvar collection = repository.getCollectionManager().getCollection(").append(collectionId).append(", false);\n"); 215 buffer.append("\ndocument.removeFromCollection(collection);\n"); 216 buffer.append("\n"); 217 } 218 219 public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) { 220 TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection removeFromCollectionXml = simpleActionsXml.addNewRemoveFromCollection(); 221 removeFromCollectionXml.setCollection(collection); 222 } 223 } 224 225 private static final String LAZY_LOAD_DOCUMENT = "if (document == null)\n document = repository.getDocument(variantKey, true);\n"; 226 } 227 | Popular Tags |