package br.ufrgs.inf.dsmoura.repository.controller.asset; import java.util.ArrayList; import java.util.List; import br.ufrgs.inf.dsmoura.repository.controller.util.JSFUtil; import br.ufrgs.inf.dsmoura.repository.controller.validator.ValidationUtil; import br.ufrgs.inf.dsmoura.repository.model.entity.Artifactable; import br.ufrgs.inf.dsmoura.repository.model.entity.Design; import br.ufrgs.inf.dsmoura.repository.model.entity.DesignPatternDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.InterfaceSpecDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.OperationDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.UserInterfaceDTO; public class DesignMB implements Validation { public static final String GENERAL_ARTIFACT_REFERENCE_PATH = "Solution\\Design\\General Artifact"; public static final String USER_INTERFACE_REFERENCE_PATH = "Solution\\Design\\User Interface"; private AssetMB assetMB; private DesignPatternDTO designPatternDTOAux; private ArtifactMB artifactMB; private ArtifactMB userInterfaceMB; public DesignMB(AssetMB assetMB) { this.assetMB = assetMB; this.initMB(); } private void initMB() { designPatternDTOAux = new DesignPatternDTO(); artifactMB = new ArtifactMB(this.assetMB, getDTO().getArtifactDTOs(), ArtifactType.GENERAL); userInterfaceMB = new ArtifactMB(this.assetMB, getDTO().getUserInterfaceDTOs(), ArtifactType.USER_INTERFACE); } @Override public String validate() { if (designPatternDTOAux != null) { return "Select the design pattern then click in Add."; } String message = "Enter all blank fields of interface specs and operations."; for (InterfaceSpecDTO intSpecDTO : getDTO().getInterfaceSpecDTOs()) { if (intSpecDTO.getName() == null || intSpecDTO.getName().isEmpty()) { return message; } for (OperationDTO operationDTO : intSpecDTO.getOperationDTOs()) { if (operationDTO.getName() == null || operationDTO.getName().isEmpty()) { return message; } } } for (UserInterfaceDTO uiDTO : getDTO().getUserInterfaceDTOs()) { if (!ValidationUtil.validate(uiDTO) || uiDTO.getUserInterfaceTypeDTO() == null) { return "Enter all blank fields of user interface artifacts."; } } for (Artifactable artifactDTO : getDTO().getArtifactDTOs()) { if (!ValidationUtil.validate(artifactDTO)) { return "Enter all blank fields of general artifacts."; } } return ""; } public List<Artifactable> getArtifacts() { List<Artifactable> artifacts = new ArrayList<Artifactable>(); for (Artifactable artifactDTO : getDTO().getUserInterfaceDTOs()) { artifactDTO.setLocation(USER_INTERFACE_REFERENCE_PATH); } for (Artifactable artifactDTO : getDTO().getArtifactDTOs()) { artifactDTO.setLocation(GENERAL_ARTIFACT_REFERENCE_PATH); } artifacts.addAll(getDTO().getUserInterfaceDTOs()); artifacts.addAll(getDTO().getArtifactDTOs()); return artifacts; } public Boolean getHasDesign() { return getDTO().getArtifactDTOs().size() > 0 || getDTO().getDesignPatternDTOs().size() > 0 || getDTO().getInterfaceSpecDTOs().size() > 0 || getDTO().getUserInterfaceDTOs().size() > 0; } /* INTERFACE SPEC */ public String addNewInterfaceSpec() { InterfaceSpecDTO interfaceSpecDTO = new InterfaceSpecDTO(); interfaceSpecDTO.getOperationDTOs().add( new OperationDTO() ); getDTO().getInterfaceSpecDTOs().add( interfaceSpecDTO ); return ""; } public String addInterfaceSpec() { Long interfaceSpecRandomIDToAdd = Long.valueOf( JSFUtil.getRequestParameter("interfaceSpecRandomIDToAdd") ); for (InterfaceSpecDTO interfaceSpecDTO : getDTO().getInterfaceSpecDTOs()) { if (interfaceSpecDTO.getRandomID().equals(interfaceSpecRandomIDToAdd)) { int index = getDTO().getInterfaceSpecDTOs().indexOf(interfaceSpecDTO); InterfaceSpecDTO intSpecDTO = new InterfaceSpecDTO(); intSpecDTO.getOperationDTOs().add( new OperationDTO() ); getDTO().getInterfaceSpecDTOs().add( index + 1, intSpecDTO ); break; } } return ""; } public String removeInterfaceSpec() { Long interfaceSpecRandomIDToRemove = Long.valueOf( JSFUtil.getRequestParameter("interfaceSpecRandomIDToRemove") ); for (InterfaceSpecDTO intSpecDTO : getDTO().getInterfaceSpecDTOs()) { if (intSpecDTO.getRandomID().equals(interfaceSpecRandomIDToRemove)) { getDTO().getInterfaceSpecDTOs().remove(intSpecDTO); break; } } return ""; } public String addOperation() { Long interfaceSpecRandomIDToAdd = Long.valueOf( JSFUtil.getRequestParameter("interfaceSpecRandomIDToAdd") ); Long operationRandomIDToAdd = Long.valueOf( JSFUtil.getRequestParameter("operationRandomIDToAdd") ); for (InterfaceSpecDTO intSpecDTO : getDTO().getInterfaceSpecDTOs()) { if (intSpecDTO.getRandomID().equals(interfaceSpecRandomIDToAdd)) { for (OperationDTO operationDTO : intSpecDTO.getOperationDTOs()) { if (operationDTO.getRandomID().equals( operationRandomIDToAdd )) { int index = intSpecDTO.getOperationDTOs().indexOf(operationDTO); intSpecDTO.getOperationDTOs().add(index + 1, new OperationDTO() ); break; } } } } return ""; } public String removeOperation() { Long interfaceSpecRandomIDToAdd = Long.valueOf( JSFUtil.getRequestParameter("interfaceSpecRandomIDToRemove") ); Long operationRandomIDToRemove = Long.valueOf( JSFUtil.getRequestParameter("operationRandomIDToRemove") ); outFor: for (InterfaceSpecDTO intSpecDTO : getDTO().getInterfaceSpecDTOs()) { if (intSpecDTO.getRandomID().equals(interfaceSpecRandomIDToAdd)) { for (OperationDTO operationDTO : intSpecDTO.getOperationDTOs()) { if (operationDTO.getRandomID().equals( operationRandomIDToRemove )) { intSpecDTO.getOperationDTOs().remove(operationDTO); if (intSpecDTO.getOperationDTOs().isEmpty()) { intSpecDTO.getOperationDTOs().add( new OperationDTO() ); } break outFor; } } } } return ""; } /* DESIGN PATTERNS */ public String addDesignPattern() { if ((designPatternDTOAux != null) && (designPatternDTOAux.getDesignpatternPk() != null)) { if ( ! getDTO().getDesignPatternDTOs().contains( designPatternDTOAux ) ) { getDTO().getDesignPatternDTOs().add( designPatternDTOAux ); } designPatternDTOAux = new DesignPatternDTO(); } return ""; } public String removeDesignPattern() { int designPatternPkToRemove = Integer.parseInt( JSFUtil.getRequestParameter("designPatternPkToRemove") ); for (DesignPatternDTO designPatternDTO : getDTO().getDesignPatternDTOs()) { if (designPatternDTO.getDesignpatternPk() == designPatternPkToRemove) { getDTO().getDesignPatternDTOs().remove( designPatternDTO ); break; } } return ""; } public ArtifactMB getArtifactMB() { return artifactMB; } public void setArtifactMB(ArtifactMB artifactMB) { this.artifactMB = artifactMB; } public ArtifactMB getUserInterfaceMB() { return userInterfaceMB; } public void setUserInterfaceMB(ArtifactMB userInterfaceMB) { this.userInterfaceMB = userInterfaceMB; } public Design getDTO() { return this.assetMB.getAsset().getSolution().getDesign(); } public DesignPatternDTO getDesignPatternDTOAux() { return designPatternDTOAux; } public void setDesignPatternDTOAux(DesignPatternDTO designPatternDTOAux) { this.designPatternDTOAux = designPatternDTOAux; } }