All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.nakeduml.seamgeneration.page.SeamPageBuilder 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.NakedUmlConfig;
import net.sf.nakeduml.feature.StepDependency;
import net.sf.nakeduml.feature.visit.VisitAfter;
import net.sf.nakeduml.name.NameConverter;
import net.sf.nakeduml.seamgeneration.SeamTransformationPhase;
import net.sf.nakeduml.seamgeneration.UserInteractionElementVisitor;
import net.sf.nakeduml.textmetamodel.TextFile;
import net.sf.nakeduml.textmetamodel.TextOutputRoot;
import net.sf.nakeduml.textmetamodel.TextWorkspace;
import net.sf.nakeduml.userinteractionmetamodel.ClassifierUserInteraction;
import net.sf.nakeduml.userinteractionmetamodel.UserInteractionKind;
import net.sf.nakeduml.userinteractionmetamodel.UserInteractionWorkspace;

import org.jboss.seam.core.Expressions;
import org.jboss.seam.core.Expressions.ValueExpression;
import org.jboss.seam.navigation.Navigation;
import org.jboss.seam.navigation.Page;
import org.jboss.seam.navigation.Param;
import org.jboss.seam.navigation.Rule;

@StepDependency(phase = SeamTransformationPhase.class, after = SeamLoginPageBuilder.class, requires=SeamApplicationPageMerger.class)
public class SeamPageBuilder extends UserInteractionElementVisitor {

//	public static final String VIEW_DIR = "gen-resources";
	public static final String VIEW_DIR = "gen-view";
	private Page page;
	private Navigation navigation;
	private Navigation containmentNavigation;
	private Navigation upContainmentNavigation;
	private Navigation backHistory;
	
	private List exceptions;
	
	@Override
	public void initialize(UserInteractionWorkspace workspace,NakedUmlConfig config,TextWorkspace textWorkspace){
		super.initialize(workspace, config, textWorkspace);
		page = new Page("*");
		navigation = new Navigation();
		containmentNavigation = new Navigation();
		upContainmentNavigation = new Navigation();
		backHistory = new Navigation();
		exceptions = new ArrayList();
		exceptions.add(new PagesException("org.jboss.seam.framework.EntityNotFoundException","/error.xhtml",FacesMessage.SEVERITY_WARN,"Record not found"));
		exceptions.add(new PagesException("javax.persistence.EntityNotFoundException","/error.xhtml",FacesMessage.SEVERITY_WARN,"Record not found"));
		exceptions.add(new PagesException("javax.persistence.EntityExistsException","/error.xhtml",FacesMessage.SEVERITY_WARN,"Duplicate record"));
		exceptions.add(new PagesException("javax.persistence.OptimisticLockException","/error.xhtml",FacesMessage.SEVERITY_WARN,"Another user changed the same data, please try again"));
		exceptions.add(new PagesException("org.jboss.seam.security.AuthorizationException","/error.xhtml",FacesMessage.SEVERITY_WARN,"You don't have permission to access this resource"));
		exceptions.add(new PagesException("org.jboss.seam.security.NotLoggedInException","/login.xhtml",FacesMessage.SEVERITY_WARN,"#{messages['org.jboss.seam.NotLoggedIn']}"));
		exceptions.add(new PagesException("javax.faces.application.ViewExpiredException","/error.xhtml",FacesMessage.SEVERITY_WARN,"Your session has timed out, please try again"));
	}
	
	@VisitAfter
	public void visitAfterEntityNavigations(ClassifierUserInteraction e) {
		if (e.getUserInteractionKind()==UserInteractionKind.EDIT) {
			Rule rule = new Rule();
			rule.setOutcomeValue(NameConverter.decapitalize(e.getClassifier().getName()));
			rule.addNavigationHandler(
					new NakedRedirectNavigationHandler(
							stringValueExpressionFor(
									resolveFlattenedViewId(e,".xhtml")), 
									stringValueExpressionFor(""), 
									new ArrayList(), "", 
									FacesMessage.SEVERITY_INFO, ""));
			
			navigation.getRules().add(rule);
			containmentNavigation.getRules().add(rule);
			upContainmentNavigation.setOutcome(Expressions.instance().createValueExpression("#{crudController.upContainment()}"));
			upContainmentNavigation.getRules().add(rule);
			
		}
	}
	
	@SuppressWarnings("unchecked")
	private static ValueExpression stringValueExpressionFor(String expr) {
		return (ValueExpression) ((expr == null) ? expr : Expressions.instance().createValueExpression(expr, String.class));
	}
	
	@VisitAfter
	public void visitAfterWorkspace(UserInteractionWorkspace e) {
		page.getNavigations().put("#{crudController.outjectCompositionOwnerFromRoleSelection}", navigation);
		page.getNavigations().put("#{crudController.outjectCompositionOwnerFromContainment}", containmentNavigation);
		page.getNavigations().put("up", upContainmentNavigation);
		backHistory.setOutcome(Expressions.instance().createValueExpression("#{crudController.clearPopAndOutject()}"));
		Rule backHistoryRule = new Rule();
		backHistoryRule.setCondition(Expressions.instance().createValueExpression("#{true}"));
		backHistoryRule.addNavigationHandler(new NakedRedirectNavigationHandler(stringValueExpressionFor("#{historyStack.poppedViewId}"), stringValueExpressionFor(""),
				new ArrayList(), "", FacesMessage.SEVERITY_INFO, ""));
		backHistory.getRules().add(backHistoryRule);
		page.getNavigations().put("backHistory", backHistory);
		
		TextOutputRoot outputRoot = textWorkspace.findOrCreateTextOutputRoot(VIEW_DIR);
		List path = new ArrayList();
		path.add("WEB-INF");
		path.add("pages.xml");
		TextFile t = outputRoot.findOrCreateTextFile(path, new SeamPageSource(page,exceptions));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy