📄 patternstrategy.java
字号:
/**
* Copyright (c) 2002, Siddhartha P. Chandurkar siddhartha@visioncodified.com
* All rights reserved.
* Licensed under the Academic Free License version 1.1
* See the file LICENSE.TXT for details.
* LICENSE.txt is located in the directory <install-directory>\Jenerator
* of your Jenertaor Installation.
*
*/
package com.jenerator.transformer;
import com.jenerator.struct.ConfigStructs;
import com.jenerator.struct.pattern.*;
import com.jenerator.util.Configurator;
import org.apache.log4j.Logger;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
/**
* PatternStrategy
*
* @author Siddhartha P. Chandurkar
* @version 0.9.0
*/
public class PatternStrategy extends TransformStrategy {
private static Logger log = Logger.getLogger(com.jenerator.transformer.PatternStrategy.class.getName());
/**
* This is an abstract method which each class which extends from this
* class has to override. This method cordinates the transformation
* of XML to code using appropriate templates
* @exception TransformFailedExceptoin The transformation from XML to code
* code has failed
*/
public void transform() throws TransformFailedException {
try {
ConfigStructs configStructs = Configurator.getInstance().getConfigStructs();
Vector patternStructs = configStructs.getPatternStructs();
for (int i = 0; i < patternStructs.size(); i++) {
if (patternStructs.elementAt(i) instanceof com.jenerator.struct.pattern.SingletonStruct) {
log.debug("Generating Singleton Pattern");
SingletonStruct singletonStruct = (SingletonStruct) patternStructs.elementAt(i);
processor.process(singletonStruct.toXml(), "patterns.xsl", singletonStruct.getName() + ".java", singletonStruct.getPackageDir());
} else if (patternStructs.elementAt(i) instanceof com.jenerator.struct.pattern.CompositeStruct) {
log.debug("Generating Composite Pattern");
StringBuffer xmlEpilog = new StringBuffer();
xmlEpilog.append("<?xml version='1.0'?>");
xmlEpilog.append("<pattern type=\"Composite\">");
CompositeStruct compositeStruct = (CompositeStruct) patternStructs.elementAt(i);
StringBuffer xmlBuffer = new StringBuffer();
//For composite-class
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>composite-name</pattern-class>");
xmlBuffer.append(compositeStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", compositeStruct.getCompositeName() + ".java", compositeStruct.getPackageDir());
xmlBuffer = null;
//For component-name
xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>component-name</pattern-class>");
xmlBuffer.append(compositeStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", compositeStruct.getComponentName() + ".java", compositeStruct.getPackageDir());
xmlBuffer = null;
//For Leaf(s)
Vector leafNames = compositeStruct.getLeafNames();
for (int k = 0; k < leafNames.size(); k++) {
String leafName = (String) leafNames.elementAt(k);
xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>leaf-name</pattern-class>");
xmlBuffer.append("<l-name>" + leafName + "</l-name>");
xmlBuffer.append(compositeStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", leafName + ".java", compositeStruct.getPackageDir());
xmlBuffer = null;
}
} else if (patternStructs.elementAt(i) instanceof com.jenerator.struct.pattern.TemplateMethodStruct) {
log.debug("Generating TemplateMethod Pattern");
StringBuffer xmlEpilog = new StringBuffer();
xmlEpilog.append("<?xml version='1.0'?>");
xmlEpilog.append("<pattern type=\"TemplateMethod\">");
TemplateMethodStruct templateMethodStruct = (TemplateMethodStruct) patternStructs.elementAt(i);
//For abstract-class
StringBuffer xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>abstract</pattern-class>");
xmlBuffer.append(templateMethodStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", templateMethodStruct.getAbstractClassName() + ".java", templateMethodStruct.getPackageDir());
xmlBuffer = null;
//For concrete-class
xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>concrete</pattern-class>");
xmlBuffer.append(templateMethodStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", templateMethodStruct.getConcreteClassName() + ".java", templateMethodStruct.getPackageDir());
xmlBuffer = null;
} else if (patternStructs.elementAt(i) instanceof com.jenerator.struct.pattern.StrategyStruct) {
log.debug("Generating Strategy Pattern");
StringBuffer xmlEpilog = new StringBuffer();
xmlEpilog.append("<?xml version='1.0'?>");
xmlEpilog.append("<pattern type=\"Strategy\">");
StrategyStruct strategyStruct = (StrategyStruct) patternStructs.elementAt(i);
//For Strategy Interface
StringBuffer xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>strategy-interface</pattern-class>");
xmlBuffer.append(strategyStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", strategyStruct.getStrategyInterfaceName() + ".java", strategyStruct.getPackageDir());
xmlBuffer = null;
//For Concrete Strategies
Vector strategyNames = strategyStruct.getConcreteStrategies();
for (int k = 0; k < strategyNames.size(); k++) {
String strategyName = (String) strategyNames.elementAt(k);
xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>concrete-strategy</pattern-class>");
xmlBuffer.append("<s-name>" + strategyName + "</s-name>");
xmlBuffer.append(strategyStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", strategyName + ".java", strategyStruct.getPackageDir());
xmlBuffer = null;
}
} else if (patternStructs.elementAt(i) instanceof com.jenerator.struct.pattern.CommandStruct) {
log.debug("Generating Command Pattern");
StringBuffer xmlEpilog = new StringBuffer();
xmlEpilog.append("<?xml version='1.0'?>");
xmlEpilog.append("<pattern type=\"Command\">");
CommandStruct commandStruct = (CommandStruct) patternStructs.elementAt(i);
//For Abstract Command
StringBuffer xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>abstract-command</pattern-class>");
xmlBuffer.append(commandStruct.toXml());
processor.process(xmlBuffer.toString(), "patterns.xsl", commandStruct.getAbstractCommandName() + ".java", commandStruct.getPackageDir());
xmlBuffer = null;
//For Receiver
xmlBuffer = new StringBuffer();
xmlBuffer.append(xmlEpilog.toString());
xmlBuffer.append("<pattern-class>receiver</pattern-class>");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -