KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > doctaskrunner > commonimpl > SimpleActionsTaskSpecificationImpl


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
27 import java.util.ArrayList JavaDoc;
28 import java.util.Iterator JavaDoc;
29
30 public class SimpleActionsTaskSpecificationImpl implements SimpleActionsTaskSpecification {
31     private String JavaDoc description;
32     private boolean stopOnFirstError;
33     private Repository repository;
34     private boolean validateOnSave;
35     private List JavaDoc actions = new ArrayList JavaDoc();
36
37     public SimpleActionsTaskSpecificationImpl(String JavaDoc description, boolean stopOnFirstError, Repository repository) {
38         if (description == null)
39             throw new IllegalArgumentException JavaDoc("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 JavaDoc startVersion, String JavaDoc newBranch, String JavaDoc 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 JavaDoc collection) {
58         actions.add(new AddToCollectionAction(collection));
59     }
60
61     public void addRemoveFromCollection(String JavaDoc collection) {
62         actions.add(new RemoveFromCollectionAction(collection));
63     }
64
65     public String JavaDoc getDescription() {
66         return description;
67     }
68
69     public String JavaDoc getScript() throws RepositoryException {
70         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
71         buffer.append("var document = null;\n");
72         Iterator JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc("Unrecognized simple action: " + actionXml);
116             }
117         }
118     }
119
120     interface SimpleAction {
121         void addScriptCode(StringBuffer JavaDoc buffer) throws RepositoryException ;
122         void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml);
123     }
124
125     class CreateVariantAction implements SimpleAction {
126         private String JavaDoc startVersion;
127         private String JavaDoc newBranch;
128         private String JavaDoc newLanguage;
129
130         public CreateVariantAction(String JavaDoc startVersion, String JavaDoc newBranch, String JavaDoc newLanguage) {
131             this.startVersion = startVersion;
132             this.newBranch = newBranch;
133             this.newLanguage = newLanguage;
134         }
135
136         public void addScriptCode(StringBuffer JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc collection;
183
184         public AddToCollectionAction(String JavaDoc collection) {
185             this.collection = collection;
186         }
187
188         public void addScriptCode(StringBuffer JavaDoc 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 JavaDoc collection;
205
206         public RemoveFromCollectionAction(String JavaDoc collection) {
207             this.collection = collection;
208         }
209
210         public void addScriptCode(StringBuffer JavaDoc 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 JavaDoc LAZY_LOAD_DOCUMENT = "if (document == null)\n document = repository.getDocument(variantKey, true);\n";
226 }
227
Popular Tags