r1419 - topia/trunk/topia-ui/src/main/java/org/codelutin/topia/generator
Author: chatellier Date: 2009-04-09 15:59:39 +0000 (Thu, 09 Apr 2009) New Revision: 1419 Modified: topia/trunk/topia-ui/src/main/java/org/codelutin/topia/generator/TapestryWebGenerator.java Log: Code style (tab & co...) Modified: topia/trunk/topia-ui/src/main/java/org/codelutin/topia/generator/TapestryWebGenerator.java =================================================================== --- topia/trunk/topia-ui/src/main/java/org/codelutin/topia/generator/TapestryWebGenerator.java 2009-04-09 12:59:21 UTC (rev 1418) +++ topia/trunk/topia-ui/src/main/java/org/codelutin/topia/generator/TapestryWebGenerator.java 2009-04-09 15:59:39 UTC (rev 1419) @@ -1,5 +1,5 @@ /* *##% ToPIA - Tools for Portable and Independent Architecture - * Copyright (C) 2004 - 2008 CodeLutin + * Copyright (C) 2004 - 2009 CodeLutin * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -28,7 +28,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.tapestry5.Link; import org.codelutin.generator.MonitorWriter; import org.codelutin.generator.StateModelGenerator; import org.codelutin.generator.GeneratorUtil; @@ -54,7 +53,7 @@ /** logger */ private static final Log log = LogFactory.getLog(TapestryWebGenerator.class); - + /** Already asssigned use case states names */ protected List<String> assignedUseCaseStateNames; @@ -66,7 +65,7 @@ public TapestryWebGenerator() { assignedUseCaseStateNames = new ArrayList<String>(); } - + /** * Redefintion pour une generation specifique tapestry * @@ -75,18 +74,18 @@ */ @Override public void generate(StateModel stateModel, File destDir) throws IOException { - + this.model = stateModel; // pour tous les diagramme du model for (StateModelStateChart chart : stateModel.getStateCharts()) { generate(chart,chart.getStates(),destDir); - + // generate use case engine generateUseCaseEngineFromModel(stateModel, chart,destDir); } } - + /** * Appele par lutin generator pour tous les etats du model * @param chart @@ -96,7 +95,7 @@ return (getPackageFromState(chart) + '.' + getNameFromState(state)).replace('.', File.separatorChar) + ".java"; } - + /** * Get generated class name from state * @@ -108,7 +107,7 @@ protected String getNameFromState(StateModelState state) { return "Abstract" + GeneratorUtil.toUpperCaseFirstLetter(state.getName()); } - + /** * Return specifique tapestry package name. * @@ -120,7 +119,7 @@ protected String getPackageFromState(StateModelStateChart chart) { return chart.getPackageName().replaceFirst("web", "web.pages"); } - + /** * Return specifique tapestry package name (base) * @@ -133,7 +132,7 @@ protected String getPackageFromComponents(StateModelStateChart chart) { return chart.getPackageName().replaceFirst("web.*", "web.base"); } - + /** * Generate a collection of states * @@ -142,7 +141,7 @@ * @throws IOException */ protected void generate(StateModelStateChart chart, Collection<StateModelState> states, File destDir) throws IOException { - + // et tous les états de ces diagrammes for (Object oState : states.toArray()) { generateFromState(chart,(StateModelState)oState,destDir); @@ -159,7 +158,7 @@ * @throws IOException */ protected void generateFromState(StateModelStateChart chart, StateModelState state, File destDir) throws IOException { - + // complexe if(state.isComplex()) { StateModelComplexState complexeState = (StateModelComplexState)state; @@ -167,13 +166,13 @@ } // simple else { - + StateModelSimpleState simpleState = (StateModelSimpleState)state; - + // les etat initiaux et finaux ne donne pas // pas de generation de fichier if(!simpleState.isFinal() && !simpleState.isInitial()) { - + String filename = getFilenameFromState(chart, simpleState); File outputFile = getDestinationFile(destDir, filename); if (getOverwrite() || !isNewerThanSource(outputFile)) { @@ -193,7 +192,7 @@ } // init && final } } - + /** * Called for each simple state * @@ -203,7 +202,6 @@ * @throws IOException */ protected void generateFromSimpleState(Writer output, StateModelStateChart chart, StateModelState state) throws IOException { - //String copyright = GeneratorGeneratorUtil.getCopyright(model); String copyright = model.getTagValue("copyright"); if (copyright != null && !copyright.isEmpty()) { /*{<%=copyright%> @@ -220,231 +218,233 @@ *) public abstract class <%=getNameFromState(state)%> extends UseCasePage { }*/ - + // generate events - generateInjectionAndEventsFromState(output,chart,state); - - // generate use case name - generateUseCaseNameFromState(output,chart,state); + generateInjectionAndEventsFromState(output,chart,state); + + // generate use case name + generateUseCaseNameFromState(output,chart,state); /*{}}*/ - } + } - /** - * Generate state injections - * @param output - * @param chart - * @param state - */ - @SuppressWarnings("unused") - protected void generateInjectionAndEventsFromState(Writer output, StateModelStateChart chart, StateModelState state) throws IOException { - - // liste les états de destination (pour éviter les doublons) - List<StateModelState> destStates = new ArrayList<StateModelState>(); - - for(StateModelTransition transition : state.getTransitions()) { - - StateModelState toState = transition.getDestinationState(); - - if(toState.isComplex()) { - StateModelState toInitState = ((StateModelComplexState)toState).getInitialState(); - - // l'attribute doit etre private - // sinon tapestry ne le traite pas - - // si l'état de destination n'a pas encore été traité - if(!destStates.contains(toState)){ - destStates.add(toState); + /** + * Generate state injections + * @param output + * @param chart + * @param state + */ + @SuppressWarnings("unused") + protected void generateInjectionAndEventsFromState(Writer output, StateModelStateChart chart, StateModelState state) throws IOException { + + // liste les états de destination (pour éviter les doublons) + List<StateModelState> destStates = new ArrayList<StateModelState>(); + + for(StateModelTransition transition : state.getTransitions()) { + + StateModelState toState = transition.getDestinationState(); + + if(toState.isComplex()) { + StateModelState toInitState = ((StateModelComplexState)toState).getInitialState(); + + // l'attribute doit etre private + // sinon tapestry ne le traite pas + + // si l'état de destination n'a pas encore été traité + if(!destStates.contains(toState)){ + destStates.add(toState); /*{ /* linked state "<%=toState.getName()%>" *) @InjectPage private <%=GeneratorUtil.toUpperCaseFirstLetter(toInitState.getName())%> <%=GeneratorUtil.toLowerCaseFirstLetter(toInitState.getName())%>; }*/ - // l'attribut etant prive, il faut un getter + // l'attribut etant prive, il faut un getter /*{ - /* getter for state "<%=toState.getName()%>" *) - protected <%=GeneratorUtil.toUpperCaseFirstLetter(toInitState.getName())%> get<%=GeneratorUtil.toUpperCaseFirstLetter(toInitState.getName())%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(toInitState.getName())%>; - } + /* getter for state "<%=toState.getName()%>" *) + protected <%=GeneratorUtil.toUpperCaseFirstLetter(toInitState.getName())%> get<%=GeneratorUtil.toUpperCaseFirstLetter(toInitState.getName())%>() { + return <%=GeneratorUtil.toLowerCaseFirstLetter(toInitState.getName())%>; + } }*/ - } + } /*{ - /* transition on <%=transition.getEvent()%> event *) - public Object onActionFrom<%=GeneratorUtil.toUpperCaseFirstLetter(transition.getEvent())%>() { - enterUseCase(); - return <%=GeneratorUtil.toLowerCaseFirstLetter(toInitState.getName())%>; - } + /* transition on <%=transition.getEvent()%> event *) + public Object onActionFrom<%=GeneratorUtil.toUpperCaseFirstLetter(transition.getEvent())%>() { + enterUseCase(); + return <%=GeneratorUtil.toLowerCaseFirstLetter(toInitState.getName())%>; + } }*/ - } - else { - - StateModelSimpleState simpleToState = (StateModelSimpleState)toState; - - // si l'etat a injecter n'est pas final - if(!simpleToState.isFinal()) { - - // si l'état de destination n'a pas encore été traité - if(!destStates.contains(toState)){ - destStates.add(toState); + } + else { + + StateModelSimpleState simpleToState = (StateModelSimpleState)toState; + + // si l'etat a injecter n'est pas final + if(!simpleToState.isFinal()) { + + // si l'état de destination n'a pas encore été traité + if(!destStates.contains(toState)){ + destStates.add(toState); /*{ /* linked state "<%=simpleToState.getName()%>" *) - @InjectPage - private <%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%> <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; + @InjectPage + private <%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%> <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; }*/ - // l'attribut etant prive, il faut un getter + // l'attribut etant prive, il faut un getter /*{ - /* getter for state "<%=simpleToState.getName()%>" *) - protected <%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%> get<%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; - } + /* getter for state "<%=simpleToState.getName()%>" *) + protected <%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%> get<%=GeneratorUtil.toUpperCaseFirstLetter(simpleToState.getName())%>() { + return <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; + } }*/ - } - } // isFinal + } + } // isFinal /*{ - /* transition on "<%=transition.getEvent()%>" event *) - public Object onActionFrom<%=GeneratorUtil.toUpperCaseFirstLetter(transition.getEvent())%>() { + /* transition on "<%=transition.getEvent()%>" event *) + public Object onActionFrom<%=GeneratorUtil.toUpperCaseFirstLetter(transition.getEvent())%>() { }*/ - if(simpleToState.isFinal()) { -/*{ return leaveUseCase(); + if(simpleToState.isFinal()) { +/*{ return leaveUseCase(); }*/ - } else { -/*{ return <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; + } else { +/*{ return <%=GeneratorUtil.toLowerCaseFirstLetter(simpleToState.getName())%>; }*/ - } + } /*{ } }*/ - } - } - } - - /** - * Generate use case name - * - * @param output - * @param chart - * @param state - */ - protected void generateUseCaseNameFromState(Writer output, StateModelStateChart chart, StateModelState state) throws IOException { + } + } + } - String stateId = generateStateUseCaseName(state.getName()); + /** + * Generate use case name + * + * @param output + * @param chart + * @param state + */ + protected void generateUseCaseNameFromState(Writer output, StateModelStateChart chart, StateModelState state) throws IOException { + + String stateId = generateStateUseCaseName(state.getName()); /*{ - /* return a unique state id for model *) - protected final String getUseCaseName() { - return "<%=stateId%>"; - } + /* return a unique state id for model *) + protected final String getUseCaseName() { + return "<%=stateId%>"; + } }*/ - } - - /** - * Genere un nom unique d'etat pour le model courant. - * - * Pour des raisons de debugage, on utilise des lettres particuliere du - * nom de l'etat, suivit d'un numero, s'il y a collision. - * - * @return a unique name - */ - protected String generateStateUseCaseName(String name) { - - String ucsn = getHashStateName(name); - - // test already assigned - String uniqueucsn = ucsn; - int num = 2; - while(assignedUseCaseStateNames.contains(uniqueucsn)) { - uniqueucsn = new StringBuffer(ucsn).append(num++).toString(); - } - - assignedUseCaseStateNames.add(uniqueucsn); - - return uniqueucsn; - } - - /** - * Hash a state name. - * - * On prend la premiere lettre de chaque mot. - * - * ContactList -> cl - * contactList -> cl - * ContactListPage -> clp - * - * @param name - * @return hashed state name - */ - protected String getHashStateName(String name) { - - // bug si moins de 1 caractere - if(name == null || name.length()<1) return name; - - StringBuffer sb = new StringBuffer(); - - // on prend la premiere lettre - sb.append(Character.toLowerCase(name.charAt(0))); - - // ensuite, on prend les majuscules - for(int i = 1 ; i < name.length() ; ++i) { - - // si maj - if(Character.isUpperCase(name.charAt(i))) { - sb.append(Character.toLowerCase(name.charAt(i))); - } - } - - return sb.toString(); - } - - /** - * Generate the engine use case class. - * - * Need to be generated inside client webapp directory to be analysed by - * tapestry (annotations) - * - * @param model model - * @param chart chart - */ - protected void generateUseCaseEngineFromModel(StateModel model,StateModelStateChart chart,File destDir) throws IOException { - String componentPackageName = getPackageFromComponents(chart); - - // UseCasePage - String filename = (componentPackageName + ".UseCasePage").replace('.', File.separatorChar) + ".java"; - File outputFile = getDestinationFile(destDir, filename); - if (getOverwrite() || !isNewerThanSource(outputFile)) { - try { - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - // generate UseCasePage class - generateUseCasePageClass(monitorOut,model,componentPackageName); - write(outputFile, monitorOut); - } catch (Exception e) { - log.warn("Erreur lors de la génération du fichier UseCasePage",e); - throw new RuntimeException( - "Erreur lors de la génération du fichier UseCasePage", e); - } - } - - // UseCaseMap - filename = (componentPackageName + ".UseCaseMap").replace('.', File.separatorChar) + ".java"; - outputFile = getDestinationFile(destDir, filename); - if (getOverwrite() || !isNewerThanSource(outputFile)) { - try { - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - // generate UseCasePage class - generateUseCaseMapClass(monitorOut,componentPackageName); - write(outputFile, monitorOut); - } catch (Exception e) { - log.warn("Erreur lors de la génération du fichier UseCaseMap",e); - throw new RuntimeException( - "Erreur lors de la génération du fichier UseCaseMap", e); - } - } - } + } + + /** + * Genere un nom unique d'etat pour le model courant. + * + * Pour des raisons de debugage, on utilise des lettres particuliere du + * nom de l'etat, suivit d'un numero, s'il y a collision. + * + * @return a unique name + */ + protected String generateStateUseCaseName(String name) { - /** - * Generate base.UseCasePage class - * @param output - * @param componentPackageName - */ - private void generateUseCasePageClass(MonitorWriter output, StateModel model, String componentPackageName) throws IOException { + String ucsn = getHashStateName(name); + + // test already assigned + String uniqueucsn = ucsn; + int num = 2; + while(assignedUseCaseStateNames.contains(uniqueucsn)) { + uniqueucsn = new StringBuffer(ucsn).append(num++).toString(); + } + + assignedUseCaseStateNames.add(uniqueucsn); + + return uniqueucsn; + } + + /** + * Hash a state name. + * + * On prend la premiere lettre de chaque mot. + * + * ContactList -> cl + * contactList -> cl + * ContactListPage -> clp + * + * @param name + * @return hashed state name + */ + protected String getHashStateName(String name) { + + // bug si moins de 1 caractere + if(name == null || name.length()<1) { + return name; + } + + StringBuffer sb = new StringBuffer(); + + // on prend la premiere lettre + sb.append(Character.toLowerCase(name.charAt(0))); + + // ensuite, on prend les majuscules + for(int i = 1 ; i < name.length() ; ++i) { + + // si maj + if(Character.isUpperCase(name.charAt(i))) { + sb.append(Character.toLowerCase(name.charAt(i))); + } + } + + return sb.toString(); + } + + /** + * Generate the engine use case class. + * + * Need to be generated inside client webapp directory to be analysed by + * tapestry (annotations) + * + * @param model model + * @param chart chart + */ + protected void generateUseCaseEngineFromModel(StateModel model,StateModelStateChart chart,File destDir) throws IOException { + String componentPackageName = getPackageFromComponents(chart); + + // UseCasePage + String filename = (componentPackageName + ".UseCasePage").replace('.', File.separatorChar) + ".java"; + File outputFile = getDestinationFile(destDir, filename); + if (getOverwrite() || !isNewerThanSource(outputFile)) { + try { + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + // generate UseCasePage class + generateUseCasePageClass(monitorOut,model,componentPackageName); + write(outputFile, monitorOut); + } catch (Exception e) { + log.warn("Erreur lors de la génération du fichier UseCasePage",e); + throw new RuntimeException( + "Erreur lors de la génération du fichier UseCasePage", e); + } + } + + // UseCaseMap + filename = (componentPackageName + ".UseCaseMap").replace('.', File.separatorChar) + ".java"; + outputFile = getDestinationFile(destDir, filename); + if (getOverwrite() || !isNewerThanSource(outputFile)) { + try { + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + // generate UseCasePage class + generateUseCaseMapClass(monitorOut,componentPackageName); + write(outputFile, monitorOut); + } catch (Exception e) { + log.warn("Erreur lors de la génération du fichier UseCaseMap",e); + throw new RuntimeException( + "Erreur lors de la génération du fichier UseCaseMap", e); + } + } + } + + /** + * Generate base.UseCasePage class + * @param output + * @param componentPackageName + */ + private void generateUseCasePageClass(MonitorWriter output, StateModel model, String componentPackageName) throws IOException { /*{package <%=componentPackageName%>; import org.apache.tapestry5.Link; @@ -456,89 +456,89 @@ import org.apache.tapestry5.services.Request; public abstract class UseCasePage}*/ - - // ajoute un heritage si il a ete specifie dans un fichier de propriete - Map<String,String> tagValues = model.getTagValues(); - if(tagValues != null) { - String tagUseCaseEngineExtendedClass = tagValues.get("usecaseengineextendedclass"); - if(tagUseCaseEngineExtendedClass != null) { - /*{ extends <%=tagUseCaseEngineExtendedClass%>}*/ - } - } + // ajoute un heritage si il a ete specifie dans un fichier de propriete + Map<String,String> tagValues = model.getTagValues(); + if(tagValues != null) { + String tagUseCaseEngineExtendedClass = tagValues.get("usecaseengineextendedclass"); + if(tagUseCaseEngineExtendedClass != null) { + /*{ extends <%=tagUseCaseEngineExtendedClass%>}*/ + } + } + /*{ implements LinkFactoryListener { - private static final String UC_PARAMETER_NAME = "UC"; - private static final String UC_PARAMETER_SEPARATOR = ":"; - - @ApplicationState - private UseCaseMap useCaseManager; - private boolean useCaseManagerExists; - - @Inject - @Service("LinkFactory") - private LinkFactory _linkFactory; - - @Inject - @Service("Request") - private Request _request; + private static final String UC_PARAMETER_NAME = "UC"; + private static final String UC_PARAMETER_SEPARATOR = ":"; + + @ApplicationState + private UseCaseMap useCaseManager; + private boolean useCaseManagerExists; + + @Inject + @Service("LinkFactory") + private LinkFactory _linkFactory; + + @Inject + @Service("Request") + private Request _request; - private String UCName; - - public void onActivate() { - _linkFactory.addListener(this); - - UCName = _request.getParameter(UC_PARAMETER_NAME); - } - - protected abstract String getUseCaseName(); - - /** - * Create stack if not exists - *) - protected void init() { - if(!useCaseManagerExists) { - useCaseManager = new UseCaseMap(); - } - } - /** - * Enter in a new sub use case - *) - protected void enterUseCase() { - init(); - // current - String currentUCN = UCName; - // new - UCName = (currentUCN == null) ? getUseCaseName() : currentUCN + UC_PARAMETER_SEPARATOR + getUseCaseName(); - useCaseManager.enterSubUseCase(UCName, currentUCN, this); - } - - /** - * Leave a sub use case - *) - protected UseCasePage leaveUseCase() { - init(); - - UseCasePage nextPage = null; - - // current UCN - String UC = UCName; + private String UCName; + + public void onActivate() { + _linkFactory.addListener(this); + + UCName = _request.getParameter(UC_PARAMETER_NAME); + } + + protected abstract String getUseCaseName(); + + /** + * Create stack if not exists + *) + protected void init() { + if(!useCaseManagerExists) { + useCaseManager = new UseCaseMap(); + } + } + /** + * Enter in a new sub use case + *) + protected void enterUseCase() { + init(); + // current + String currentUCN = UCName; + // new + UCName = (currentUCN == null) ? getUseCaseName() : currentUCN + UC_PARAMETER_SEPARATOR + getUseCaseName(); + useCaseManager.enterSubUseCase(UCName, currentUCN, this); + } + + /** + * Leave a sub use case + *) + protected UseCasePage leaveUseCase() { + init(); + + UseCasePage nextPage = null; + + // current UCN + String UC = UCName; - // get state - Object[] response = useCaseManager.leaveUseCase(UC); - - // if null, return null, don't change page - if(response != null) { - // get UCN before enter this one - UCName = (String) response[0]; - - nextPage = (UseCasePage) response[1]; - } + // get state + Object[] response = useCaseManager.leaveUseCase(UC); + + // if null, return null, don't change page + if(response != null) { + // get UCN before enter this one + UCName = (String) response[0]; + + nextPage = (UseCasePage) response[1]; + } - return nextPage; - } + return nextPage; + } - /* + /* * @see org.apache.tapestry5.internal.services.LinkFactoryListener#createdComponentEventLink(org.apache.tapestry5.Link) *) @Override @@ -555,61 +555,61 @@ // action addUCParameter(_link); } - - protected void addUCParameter(Link _link) { - if(_link.getParameterValue(UC_PARAMETER_NAME) == null) { + + protected void addUCParameter(Link _link) { + if(_link.getParameterValue(UC_PARAMETER_NAME) == null) { - if(UCName != null) { - _link.addParameter(UC_PARAMETER_NAME, UCName); - } - } - } + if(UCName != null) { + _link.addParameter(UC_PARAMETER_NAME, UCName); + } + } + } } }*/ - } - - /** - * Generate base.UseCaseMap class - * @param output - * @param componentPackageName - */ - private void generateUseCaseMapClass(MonitorWriter output, String componentPackageName) throws IOException { + } + + /** + * Generate base.UseCaseMap class + * @param output + * @param componentPackageName + */ + private void generateUseCaseMapClass(MonitorWriter output, String componentPackageName) throws IOException { /*{package <%=componentPackageName%>; import java.util.HashMap; import java.util.Map; public class UseCaseMap { - - /** - * Map (state name -> state instance) - *) - private Map<String,Object[]> mapUseCase; - - /** - * Constructor - *) - public UseCaseMap () { - mapUseCase = new HashMap<String,Object[]>(); - } - - /** - * New sub use case - *) - public void enterSubUseCase(String newUseCaseName, String previousUseCaseName, Object state) { - mapUseCase.put(newUseCaseName,new Object[]{previousUseCaseName,state}); - } - - /** - * Finish a subusecase - * - * Return the state that init the subuse case - * @return a state - *) - public Object[] leaveUseCase(String useCaseName) { - return mapUseCase.get(useCaseName); - } + + /** + * Map (state name -> state instance) + *) + private Map<String,Object[]> mapUseCase; + + /** + * Constructor + *) + public UseCaseMap () { + mapUseCase = new HashMap<String,Object[]>(); + } + + /** + * New sub use case + *) + public void enterSubUseCase(String newUseCaseName, String previousUseCaseName, Object state) { + mapUseCase.put(newUseCaseName,new Object[]{previousUseCaseName,state}); + } + + /** + * Finish a subusecase + * + * Return the state that init the subuse case + * @return a state + *) + public Object[] leaveUseCase(String useCaseName) { + return mapUseCase.get(useCaseName); + } } }*/ - } + } }
participants (1)
-
chatellier@users.labs.libre-entreprise.org