![JAR search and dependency download from the Maven repository](/logo.png)
net.sf.nakeduml.seamgeneration.page.SeamListPageBuilder Maven / Gradle / Ivy
package net.sf.nakeduml.seamgeneration.page;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import net.sf.nakeduml.feature.StepDependency;
import net.sf.nakeduml.feature.visit.VisitAfter;
import net.sf.nakeduml.feature.visit.VisitBefore;
import net.sf.nakeduml.javageneration.seam.SeamSupport;
import net.sf.nakeduml.name.NameConverter;
import net.sf.nakeduml.seamgeneration.SeamTransformationPhase;
import net.sf.nakeduml.userinteractionmetamodel.ClassifierUserInteraction;
import net.sf.nakeduml.userinteractionmetamodel.PropertyNavigation;
import net.sf.nakeduml.userinteractionmetamodel.UserInteractionKind;
import org.jboss.seam.core.Expressions;
import org.jboss.seam.navigation.Navigation;
import org.jboss.seam.navigation.Param;
import org.jboss.seam.navigation.Rule;
@StepDependency(phase = SeamTransformationPhase.class, after = SeamEditPageBuilder.class, requires = { SeamSupport.class, SeamLoginPageBuilder.class,
SeamPageBuilder.class, SeamCreatePageBuilder.class })
public class SeamListPageBuilder extends AbstractSeamPageBuilder {
@VisitBefore
public void visitBeforeEntityNavigations(ClassifierUserInteraction ui) {
super.visitBeforeEntityNavigations(ui);
UserInteractionKind userInteractionKind = ui.getUserInteractionKind();
switch (userInteractionKind) {
case LIST:
addListNavigations(ui);
break;
}
}
@VisitAfter
public void visitAfterEntityNavigations(ClassifierUserInteraction ui) {
UserInteractionKind userInteractionKind = ui.getUserInteractionKind();
switch (userInteractionKind) {
case LIST:
super.visitAfterEntityNavigations(ui);
break;
}
}
@Override
protected void addPropertyNavigationNavigations(ClassifierUserInteraction ui) {
StringBuilder sb;
List pns = ui.getOriginatingPropertyNavigation().getClassifierUserInteraction().getPropertyNavigation();
for (PropertyNavigation pn : pns) {
if (pn.getResultingUserInteraction().isTooMany()) {
sb = new StringBuilder();
sb.append("#{crudController.outjectCompositionOwnerOfTooMany(");
if (ui.getUserInteractionKind() == UserInteractionKind.LIST) {
sb.append(NameConverter.decapitalize(ui.getOriginatingPropertyNavigation().getClassifierUserInteraction().getClassifier().getName()));
} else {
sb.append(NameConverter.decapitalize(ui.getClassifier().getName()));
}
sb.append(", '");
sb.append(NameConverter.decapitalize(pn.getResultingUserInteraction().getClassifier().getQualifiedImplementationType()));
sb.append("'");
sb.append(")}");
String ruleIf = Expressions.instance().createValueExpression("#{param.navigateTo eq '" + pn.getName() + "'}").getExpressionString()+pn.getClassifierUserInteraction().getName();
page.getNavigations().put(sb.toString(), listMenuTooManyNavigation.get(ruleIf));
}
}
}
private void addListNavigations(ClassifierUserInteraction ui) {
Navigation listNavigationEditView = createViewNavigation(ui);
addEditNavigation(ui, listNavigationEditView);
if (ui.getOriginatingPropertyNavigation().getProperty().isComposite()) {
addCreateNavigation(ui);
addDeleteNavigation();
addUpdateNavigation(ui);
} else {
addUpdateNavigation(ui);
}
addMenuNavigations(ui.getOriginatingPropertyNavigation().getClassifierUserInteraction());
addLinkNavigations(ui);
}
@Override
protected void addMenuNavigation(PropertyNavigation pn) {
if (pn.getResultingUserInteraction().getUserInteractionKind() == UserInteractionKind.CREATE) {
throw new IllegalStateException("Not handled");
// TODO this never fires?
} else if (pn.getResultingUserInteraction().getUserInteractionKind() == UserInteractionKind.EDIT) {
Navigation editNavigation = new Navigation();
Rule rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{param.navigateTo eq '" + pn.getName() + "'}"));
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(
/* findClassifierUserInteractionOfKind */pn.getResultingUserInteraction(), ".xhtml")), stringValueExpressionFor(""),
new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
editNavigation.getRules().add(rule);
// TODO this is exactly the same as on the menu
StringBuilder methodExpression = new StringBuilder();
methodExpression.append("#{crudController.outjectCompositionOwner(");
methodExpression.append(NameConverter.decapitalize(pn.getClassifierUserInteraction().getClassifier().getName()));
methodExpression.append(".");
methodExpression.append(NameConverter.decapitalize(pn.getName()));
methodExpression.append(")}");
page.getNavigations().put(methodExpression.toString(), editNavigation);
} else if (pn.getResultingUserInteraction().getUserInteractionKind() == UserInteractionKind.LIST) {
Rule rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{param.navigateTo eq '" + pn.getName() + "'}"));
List params = new ArrayList();
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(pn.getResultingUserInteraction(),
".xhtml")), stringValueExpressionFor(""), params, "", FacesMessage.SEVERITY_INFO, ""));
if (pn.getResultingUserInteraction().isTooMany()) {
Navigation listNav = listMenuTooManyNavigation.get(rule.getCondition().getExpressionString()+pn.getClassifierUserInteraction().getName());
if (listNav==null) {
listNav = new Navigation();
listNav.getRules().add(rule);
listMenuTooManyNavigation.put(rule.getCondition().getExpressionString()+pn.getClassifierUserInteraction().getName(), listNav);
}
} else {
menuNavigation.getRules().add(rule);
}
} else {
throw new IllegalStateException("Not handled");
}
}
private void addUpdateNavigation(ClassifierUserInteraction ui) {
Navigation updateNavigation = new Navigation();
Rule rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{true}"));
updateNavigation.getRules().add(rule);
page.getNavigations().put("#{crudController.flush()}", updateNavigation);
}
private void addLinkNavigations(ClassifierUserInteraction ui) {
Rule rule;
List navigations = ui.getLinkNavigation();
for (PropertyNavigation propertyNavigation : navigations) {
Navigation linkNavigation = new Navigation();
rule = new Rule();
//TODO bug here, think resolveFlattenedViewId is incorrect
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(propertyNavigation
.getResultingUserInteraction(), ".xhtml")), stringValueExpressionFor(""), new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
rule.setCondition(Expressions.instance().createValueExpression("#{true}"));
linkNavigation.getRules().add(rule);
if (propertyNavigation.getResultingUserInteraction().getUserInteractionKind()==UserInteractionKind.LIST) {
page.getNavigations()
.put(propertyNavigation.getResultingUserInteraction().getName(), linkNavigation);
//setOutcome produces evaluate=#{}
linkNavigation.setOutcome(Expressions.instance().createValueExpression("#{crudController.outjectCompositionOwner(objectVar)}"));
} else {
page.getNavigations()
.put("#{crudController.outjectCompositionOwner(objectVar." + propertyNavigation.getProperty().getName() + ")}", linkNavigation);
}
}
}
private void addDeleteNavigation() {
Rule rule;
Navigation delete = new Navigation();
delete.setOutcome(Expressions.instance().createValueExpression("#{crudController.flush()}"));
rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{true}"));
delete.getRules().add(rule);
page.getNavigations().put("#{objectVar.markDeleted}", delete);
}
private void addCreateNavigation(ClassifierUserInteraction ui) {
Rule rule;
List classifierUserInteractionCreateList = findClassifierUserInteractionOfKind(workspace, ui, UserInteractionKind.CREATE);
for (ClassifierUserInteraction classifierUserInteraction : classifierUserInteractionCreateList) {
Navigation create = new Navigation();
rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{true}"));
if (!classifierUserInteractionCreateList.isEmpty()) {
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(classifierUserInteraction,
".xhtml")), stringValueExpressionFor(""), new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
create.getRules().add(rule);
}
page.getNavigations().put("create_" + classifierUserInteraction.getOriginatingPropertyNavigation().getClassifierUserInteraction().getName(), create);
}
}
private void addEditNavigation(ClassifierUserInteraction ui, Navigation listNavigationEditView) {
Rule rule;
rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{param.navigateTo eq 'edit'}"));
List classifierUserInteractionEditList = findClassifierUserInteractionOfKind(workspace, ui, UserInteractionKind.EDIT);
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(classifierUserInteractionEditList.get(0), ".xhtml")),
stringValueExpressionFor(""), new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
listNavigationEditView.getRules().add(rule);
page.getNavigations().put("#{crudController.outjectCompositionOwner(objectVar)}", listNavigationEditView);
}
private Navigation createViewNavigation(ClassifierUserInteraction ui) {
Navigation listNavigationEditView = new Navigation();
Rule rule = new Rule();
rule.setCondition(Expressions.instance().createValueExpression("#{param.navigateTo eq 'view'}"));
List classifierUserInteractionViewList = findClassifierUserInteractionOfKind(workspace, ui, UserInteractionKind.VIEW);
rule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor(resolveFlattenedViewId(classifierUserInteractionViewList.get(0), ".xhtml")),
stringValueExpressionFor(""), new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
listNavigationEditView.getRules().add(rule);
return listNavigationEditView;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy