001: /*
002: * JFolder, Copyright 2001-2006 Gary Steinmetz
003: *
004: * Distributable under LGPL license.
005: * See terms of license at gnu.org.
006: */
007:
008: package org.jfolder.console.web.admin.macro.generator;
009:
010: //base classes
011: import java.io.IOException;
012: import java.io.OutputStream;
013: import java.util.ArrayList;
014: import java.util.HashMap;
015: import java.util.Iterator;
016: import javax.servlet.ServletException;
017: import org.w3c.dom.Node;
018:
019: //project specific classes
020: import org.jfolder.common.UnexpectedSystemException;
021: import org.jfolder.common.entity.SystemEntityTagHelper;
022: import org.jfolder.common.entity.properties.SystemEntityProperties;
023: import org.jfolder.common.files.BaseVirtualFileSystemHolder;
024: import org.jfolder.common.files.SimpleVirtualFileSystemProperties;
025: import org.jfolder.common.files.VirtualFileSystemDirectory;
026: import org.jfolder.common.files.VirtualFileSystemFile;
027: import org.jfolder.common.files.VirtualFileSystemHolder;
028: import org.jfolder.common.function.WebPageTagHelper;
029: import org.jfolder.common.function.WebPageTagPreferences;
030: import org.jfolder.common.tagging.ConceptRollupTag;
031: import org.jfolder.common.tagging.ConceptTag;
032: import org.jfolder.common.tagging.ConceptTagCharacteristic;
033: import org.jfolder.common.tagging.ConceptTagConstraint;
034: import org.jfolder.common.tagging.ConceptTagPreferences;
035: import org.jfolder.common.tagging.ConceptTagSetContext;
036: import org.jfolder.common.tagging.RootConceptTagHolder;
037: import org.jfolder.common.utils.misc.MiscHelper;
038: import org.jfolder.common.utils.web.ParameterSet;
039: import org.jfolder.common.web.template.ConsoleParameterContext;
040: import org.jfolder.common.web.template.CreationResultParameterContext;
041: import org.jfolder.common.web.template.SubmitActionContext;
042: import org.jfolder.common.web.template.SubmitActionParameters;
043: import org.jfolder.console.base.BaseConsoleServlet;
044: import org.jfolder.console.base.ConsolePageContext;
045: import org.jfolder.console.base.ConsolePageMessageHolder;
046: import org.jfolder.console.base.ConsolePageParameters;
047: import org.jfolder.console.base.ConsolePageSession;
048: import org.jfolder.console.base.NamesForParentCpc;
049: import org.jfolder.console.macro.ConsoleMacro;
050: import org.jfolder.console.macro.ConsoleMacroTagHelper;
051: import org.jfolder.console.macro.v1.GoToConsoleMacroTag;
052: import org.jfolder.console.macro.v1.OpenSectionIfClosedConsoleMacroTag;
053: import org.jfolder.console.macro.v1.RootV1ConsoleMacroTag;
054: import org.jfolder.console.macro.v1.SimpleClickConsoleMacroTag;
055: import org.jfolder.console.macro.v1.SubmitActionConsoleMacroTag;
056: import org.jfolder.console.web.admin.macro.execute.PetStoreCreator;
057: import org.jfolder.console.web.admin.macro.execute.PetStoreDatabase;
058: import org.jfolder.engines.call.GovernorCallHelper;
059: import org.jfolder.platforms.servers.base.SystemServer;
060: import org.jfolder.platforms.servers.base.SystemServerFactory;
061: import org.jfolder.platforms.stores.base.SystemStore;
062: import org.jfolder.project.model.ProjectSystem;
063: import org.jfolder.project.model.ProjectSystemHelper;
064: import org.jfolder.security.model.SimpleUserIdentity;
065: import org.jfolder.security.model.UserHolder;
066: import org.jfolder.security.model.UserIdentity;
067: import org.jfolder.services.config.ConfigService;
068: import org.jfolder.services.config.ConfigServiceCallerFactory;
069: import org.jfolder.services.project.ProjectService;
070: import org.jfolder.services.project.ProjectServiceCallerFactory;
071: import org.jfolder.web.page.v1.TaglibDeclareMacroGroupWebPageTag;
072: import org.jfolder.web.page.v1.TaglibDeclareMacroWebPageTag;
073:
074: //other classes
075:
076: public class AutoApplicationGeneratorServlet extends BaseConsoleServlet {
077:
078: public AutoApplicationGeneratorServlet() {
079: }
080:
081: protected boolean checkAccess(ConsolePageSession inCps)
082: throws IOException, ServletException {
083:
084: boolean outValue = false;
085:
086: outValue = (inCps.isAdministrator());
087:
088: return outValue;
089: }
090:
091: public ConsolePageContext process(ConsolePageSession inCps,
092: UserHolder inUser, ParameterSet inPs,
093: SubmitActionContext inSac) throws IOException,
094: ServletException {
095:
096: //
097: ConsolePageContext outValue = null;
098:
099: outValue = AutoApplicationGeneratorContext.newInstance(inCps);
100:
101: if (inSac.isAction(SubmitActionParameters.OPEN)) {
102: //
103: //
104: //
105: //MiscHelper.println("LOGIN action received");
106: //MiscHelper.println("User = " + inUser.getName());
107: //inCps.getMessageHolder().setInformationHeader("Welcome");
108: //inCs.getMessageHolder().createSubMessage().setInformationHeader(
109: // "Welcome");
110: } else if (inSac.isAction(SubmitActionParameters.CREATE)) {
111: //
112: //
113: //
114: //
115: //
116: //
117: //
118: //
119: //
120: RootConceptTagHolder appMacro = createApp(inPs);
121: //
122: //
123: byte macroContent[] = ConceptRollupTag.getRollupFromList(
124: appMacro, null);
125: OutputStream os = outValue.getOutputStream();
126: os.write(macroContent, 0, macroContent.length);
127: os.flush();
128: os.close();
129: //String appName = inSac.getFirstParameter();
130: outValue.setOutputText(false);
131: outValue.setOutputFileName(MiscHelper.literalReplace(
132: "PetStoreMacro.zip", "/", "_"));
133: outValue.setMimeType("application/download");
134: } else {
135: inSac.unknownAction();
136: }
137:
138: return outValue;
139:
140: }
141:
142: //
143: //
144: //
145: public final static RootConceptTagHolder createApp(ParameterSet inPs) {
146: //
147:
148: RootConceptTagHolder outValue = null;
149:
150: //
151: outValue = ConsoleMacroTagHelper.getEmptyMacro();
152: ConsoleMacro cm = ((ConsoleMacro) outValue
153: .getFirstChildConceptTag());
154: RootV1ConsoleMacroTag rv1cmt = ((RootV1ConsoleMacroTag) cm);
155: //
156: //
157: //cm.addDescriptionToNextPage(
158: // "Very Beginning");
159: //
160: //PetStoreDatabase.createDatabase(rv1cmt, APP_NAME, inDatabase);
161: //
162: //PART I - Create Application If Present
163: //
164: byte applicationRollup[] = null;
165: //
166: //
167: String appUploadName = "(main),[FILE_UPLOAD],"
168: + AutoApplicationGeneratorContext.FILE_UPLOAD__APP_NAME;
169: //
170: if (inPs.isParameterUpload(appUploadName)) {
171: //
172: applicationRollup = inPs
173: .getParameterAsUpload(appUploadName);
174: //
175: //
176: AutoApplicationGeneratorHelper.getCreateApp(rv1cmt);
177: }
178: //
179: //
180: //
181: //PART II - Execute Database Calls
182: //
183: prepareDataAccessCalls(inPs, rv1cmt);
184: //
185: //
186: //
187: //
188: //PART III - Create Macros, Templates, and Pages
189: //
190: if (applicationRollup != null) {
191: //
192: //
193: RootConceptTagHolder projectRcth = ConceptRollupTag
194: .getRootHolderFromList(applicationRollup);
195: ConceptTag projectCt = projectRcth
196: .getFirstChildConceptTag();
197: ProjectSystem project = ((ProjectSystem) projectCt);
198: //
199: VirtualFileSystemHolder rootWebDocsVfsh = project
200: .getWebDocs();
201: VirtualFileSystemHolder rootWebDocsPropsVfsh = project
202: .getWebDocsProperties();
203: //
204: HashMap pages = new HashMap();
205: HashMap files = new HashMap();
206: HashMap templates = new HashMap();
207: HashMap macros = new HashMap();
208: //
209: //
210: //
211: loadFileTypes(rootWebDocsVfsh, rootWebDocsPropsVfsh,
212: VirtualFileSystemHolder.DIRECTORY_SEPARATOR,
213: project, pages, files, templates, macros);
214: //
215: //
216: ////create web pages
217: ////
218: ////createWebPagesOrFiles(rv1cmt, pages, true);
219: ////createWebPagesOrFiles(rv1cmt, templates, true);
220: ////createWebPagesOrFiles(rv1cmt, macros, true);
221: //
222: //
223: //Upload Files
224: createWebPagesOrFiles(rv1cmt, files, false);
225: //
226: //
227:
228: //Create Macros
229: createWebPagesOrFiles(rv1cmt, macros, true);
230: createWebPagesOrFiles(rv1cmt, templates, true);
231: createWebPagesOrFiles(rv1cmt, pages, true);
232: //
233: editWebPages(rv1cmt, macros, null, getMacroSetFilter(),
234: "Signatures");
235: editWebPages(rv1cmt, macros, getMacroSetFilter(), null,
236: "Actions");
237: //
238: //
239: //Create Templates
240: editWebPages(rv1cmt, templates, null, null, "Complete");
241: //
242: //
243: //Create Pages
244: editWebPages(rv1cmt, pages, null, null, "Complete");
245: //
246: //
247: //
248: //
249: //
250: //
251: //
252: //
253: //Deploy
254: //
255: AutoApplicationGeneratorHelper.deployApp(rv1cmt);
256: }
257:
258: return outValue;
259: }
260:
261: private final static void editWebPages(
262: RootV1ConsoleMacroTag inRv1cmt, HashMap inFileNames,
263: ArrayList inIncludeFilter[], ArrayList inExcludeFilter[],
264: String inDescription) {
265: //
266: Iterator iter = inFileNames.keySet().iterator();
267: while (iter.hasNext()) {
268: //
269: String fullFileName = ((String) iter.next());
270: VirtualFileSystemFile nextVfsf = ((VirtualFileSystemFile) inFileNames
271: .get(fullFileName));
272: //
273: MiscHelper
274: .println("AutoAppGenServ start = " + fullFileName);
275: int lastSepIndex = fullFileName
276: .lastIndexOf(VirtualFileSystemHolder.DIRECTORY_SEPARATOR);
277: lastSepIndex = lastSepIndex
278: + VirtualFileSystemHolder.DIRECTORY_SEPARATOR
279: .length();
280: //
281: String dirName = fullFileName.substring(0, lastSepIndex);
282: String fileName = fullFileName.substring(lastSepIndex);
283: //
284: MiscHelper.println("AutoAppGenServ open = " + fullFileName);
285: AutoApplicationGeneratorHelper.getOpenWebPage(inRv1cmt,
286: dirName, fileName, inDescription);
287: //
288: MiscHelper.println("AutoAppGenServ rcth = " + fullFileName);
289: RootConceptTagHolder nextRcth = ConceptRollupTag
290: .getRootHolderFromList(nextVfsf.getContent());
291: AutoApplicationGeneratorHelper.getConstructRcthTree(
292: inRv1cmt, nextRcth.getFirstConstraint(),
293: new ArrayList(), inIncludeFilter, inExcludeFilter,
294: dirName, fileName);
295: //
296: MiscHelper.println("AutoAppGenServ save = " + fullFileName);
297: //save
298: AutoApplicationGeneratorHelper.saveRcth(dirName, fileName,
299: inRv1cmt);
300: MiscHelper
301: .println("AutoAppGenServ leave = " + fullFileName);
302: //leave
303: AutoApplicationGeneratorHelper.cancelRcth(dirName,
304: fileName, inRv1cmt);
305: MiscHelper.println("AutoAppGenServ end = " + fullFileName);
306: }
307: }
308:
309: private final static ArrayList[] getMacroSetFilter() {
310:
311: ArrayList outValue[] = null;
312:
313: //
314: WebPageTagPreferences localWptp = new WebPageTagPreferences();
315: //
316: ArrayList baseFilter = new ArrayList();
317: baseFilter.add(localWptp.getRootConstraint());
318: baseFilter.add(localWptp.getUnconstrainedSymbol());
319: baseFilter.add(TaglibDeclareMacroGroupWebPageTag.MACRO_CTCON);
320: //
321: ArrayList resultValueFilter = new ArrayList(baseFilter);
322: resultValueFilter
323: .add(TaglibDeclareMacroWebPageTag.RESULT_CTCON);
324: resultValueFilter
325: .add(TaglibDeclareMacroWebPageTag.RESULT_CTCON_VALUE_CTCTEMP);
326: //
327: ArrayList actionFilter = new ArrayList(baseFilter);
328: actionFilter.add(TaglibDeclareMacroWebPageTag.ACTION_CTCON);
329: //
330: ArrayList outputFilter = new ArrayList(baseFilter);
331: outputFilter.add(TaglibDeclareMacroWebPageTag.OUTPUT_CTCON);
332: //
333: outValue = new ArrayList[3];
334: outValue[0] = resultValueFilter;
335: outValue[1] = actionFilter;
336: outValue[2] = outputFilter;
337:
338: return outValue;
339: }
340:
341: private final static void createWebPagesOrFiles(
342: RootV1ConsoleMacroTag inRv1cmt, HashMap inFileNames,
343: boolean inType) {
344: //
345: Iterator iter = inFileNames.keySet().iterator();
346: while (iter.hasNext()) {
347: //
348: String nextFullFileName = ((String) iter.next());
349: int sepIndex = nextFullFileName
350: .lastIndexOf(VirtualFileSystemHolder.DIRECTORY_SEPARATOR);
351: //
352: String nextDirName = nextFullFileName
353: .substring(0, sepIndex);
354: String nextFileName = nextFullFileName
355: .substring(sepIndex + 1);
356: //
357: if (inType) {
358: AutoApplicationGeneratorHelper.getCreateWebPage(
359: inRv1cmt, nextDirName, nextFileName);
360: } else {
361: VirtualFileSystemFile nextVfsf = ((VirtualFileSystemFile) inFileNames
362: .get(nextFullFileName));
363: AutoApplicationGeneratorHelper.getCreateWebFile(
364: inRv1cmt, nextDirName, nextFileName, nextVfsf
365: .getContent());
366: }
367: }
368: }
369:
370: private final static void loadFileTypes(
371: VirtualFileSystemHolder inFileDir,
372: VirtualFileSystemHolder inPropDir, String inCurrentDir,
373: ProjectSystem inPs, HashMap inPages, HashMap inFiles,
374: HashMap inTemplates, HashMap inMacros) {
375: //
376: //
377: //
378: ArrayList subDirNames = inFileDir.getLocalDirectories();
379: for (int i = 0; i < subDirNames.size(); i++) {
380: //
381: VirtualFileSystemDirectory nextSubDirVfsd = ((VirtualFileSystemDirectory) subDirNames
382: .get(i));
383: String nextSubDirName = nextSubDirVfsd.getName();
384: //
385: VirtualFileSystemHolder nextFileDir = inFileDir
386: .getDirectory(nextSubDirName);
387: VirtualFileSystemHolder nextPropDir = inPropDir
388: .getDirectory(nextSubDirName);
389: //
390: loadFileTypes(nextFileDir, nextPropDir, inCurrentDir
391: + nextSubDirName
392: + VirtualFileSystemHolder.DIRECTORY_SEPARATOR,
393: inPs, inPages, inFiles, inTemplates, inMacros);
394: }
395: //
396: //
397: //
398: ArrayList subFileNames = inFileDir.getLocalFiles();
399: for (int i = 0; i < subFileNames.size(); i++) {
400: //
401: VirtualFileSystemFile nextSubFileVfsf = ((VirtualFileSystemFile) subFileNames
402: .get(i));
403: String nextSubFileName = nextSubFileVfsf.getName();
404: //
405: VirtualFileSystemFile nextFileFile = inFileDir
406: .getFile(nextSubFileName);
407: VirtualFileSystemFile nextPropFile = inPropDir
408: .getFile(nextSubFileName);
409: //
410: String nextSubFileAbsoluteName = inCurrentDir
411: + nextSubFileName;
412: //
413: SimpleVirtualFileSystemProperties nextSvfsp = SimpleVirtualFileSystemProperties
414: .newInstance(nextPropFile.getContent());
415: //
416: if (inPs.isWebDocFile(nextSvfsp)) {
417: //
418: inFiles.put(nextSubFileAbsoluteName, nextFileFile);
419: } else if (inPs.isWebDocPage(nextSvfsp)
420: || inPs.isWebDocBinary(nextSvfsp)) {
421: //
422: inPages.put(nextSubFileAbsoluteName, nextFileFile);
423: } else if (inPs.isWebDocMacro(nextSvfsp)) {
424: //
425: inMacros.put(nextSubFileAbsoluteName, nextFileFile);
426: } else if (inPs.isWebDocTemplate(nextSvfsp)) {
427: //
428: inTemplates.put(nextSubFileAbsoluteName, nextFileFile);
429: } else {
430: throw UnexpectedSystemException.unknownState();
431: }
432: }
433: }
434:
435: //
436: //
437: //
438: private final static void prepareDataAccessCalls(ParameterSet inPs,
439: RootV1ConsoleMacroTag inRv1cmt) {
440: //
441: //
442: //
443: ArrayList scriptContent = new ArrayList();
444: ArrayList scriptUploadContent = new ArrayList();
445: ArrayList scriptUploadName = new ArrayList();
446: //
447: //
448: int icount = AutoApplicationGeneratorContext.MAXIMUM_SQL_SCRIPTS;
449: for (int i = 0; i < icount; i++) {
450: //
451: String nextScriptContentName = "(main),[TEXT_AREA],"
452: + AutoApplicationGeneratorContext.TEXT_AREA__SCRIPT_PREFIX
453: + i;
454: //
455: String nextScriptUploadName = "(main),[FILE_UPLOAD],"
456: + AutoApplicationGeneratorContext.FILE_UPLOAD__SCRIPT_PREFIX
457: + i;
458: //
459: if (inPs.isParameterString(nextScriptContentName)) {
460: //
461: //
462: //
463: String nextScriptContent = inPs
464: .getParameter(nextScriptContentName);
465: //
466: //
467: byte nextScriptUploadContent[] = null;
468: String nextScriptUploadFileName = null;
469: //
470: if (inPs.isParameterUpload(nextScriptUploadName)) {
471: //
472: nextScriptUploadContent = inPs
473: .getParameterAsUpload(nextScriptUploadName);
474: nextScriptUploadFileName = inPs
475: .getUploadParameterName(nextScriptUploadName);
476: }
477: //
478: if (nextScriptContent.trim().length() > 0) {
479: scriptContent.add(nextScriptContent);
480: scriptUploadContent.add(nextScriptUploadContent);
481: scriptUploadName.add(nextScriptUploadFileName);
482: }
483: }
484: }
485: //
486: //
487: //
488: if (scriptContent.size() > 0) {
489: //
490: //
491: AutoApplicationGeneratorHelper.goToDatabaseAccess(inRv1cmt);
492: //
493: for (int i = 0; i < scriptContent.size(); i++) {
494: //
495: String nextScriptContent = ((String) scriptContent
496: .get(i));
497: byte nextScriptUploadContent[] = ((byte[]) scriptUploadContent
498: .get(i));
499: String nextScriptUploadName = ((String) scriptUploadName
500: .get(i));
501: //
502: AutoApplicationGeneratorHelper.executeStatement(
503: inRv1cmt, nextScriptContent,
504: nextScriptUploadContent, nextScriptUploadName);
505: }
506: //
507: AutoApplicationGeneratorHelper.goToConsoleScreen(inRv1cmt);
508: }
509: }
510: //
511: //
512: }
|