/* Name: - BusinessDefinitionLoader Description: - Requires: - Provides: - Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality. http://www.processpuzzle.com ProcessPuzzle - Content and Workflow Management Integration Business Platform Author(s): - Zsolt Zsuffa Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.processpuzzle.business.definition.domain; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; import com.processpuzzle.application.configuration.domain.PropertyKeys; import com.processpuzzle.artifact_type.domain.ArtifactType; import com.processpuzzle.artifact_type.domain.ArtifactTypeRepository; import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroup; import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroupRepository; import com.processpuzzle.party.partyrelationshiptype.domain.PartyRelationshipType; import com.processpuzzle.party.partyrelationshiptype.domain.PartyRelationshipTypeRepository; import com.processpuzzle.party.partyrelationshiptype.domain.PartyRoleType; import com.processpuzzle.party.partyrelationshiptype.domain.PartyRoleTypeRepository; import com.processpuzzle.party.partytype.domain.PartyType; import com.processpuzzle.party.partytype.domain.PartyTypeRepository; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; import com.processpuzzle.workflow.protocol.domain.LifecycleProtocol; import com.processpuzzle.workflow.protocol.domain.ProtocolRepository; public class BusinessDefinitionLoader extends BusinessDataLoader<BusinessDefinition> { public static final String WORKLOWS_FOLDER_NAME = "Workflows"; public static final String ROLES_FOLDER_NAME = "Roles"; public static final String WORKPRODUCTS_FOLDER_NAME = "WorkProducts"; public static final String CONTENTS_FOLDER_NAME = "Content"; public BusinessDefinitionLoader( String businessDefinition ) { this( businessDefinition, new DefaultResourceLoader() ); } public BusinessDefinitionLoader( String businessDefinition, ResourceLoader resourceLoader ) { super( resourceLoader, businessDefinition ); mappingKey = PropertyKeys.BUSINESS_DEFINITION_MAPPING.getDefaultKey(); schemaKey = PropertyKeys.BUSINESS_DEFINITION_SCHEMA.getDefaultKey(); } // Protected, private methods @Override protected void saveObjects( DefaultUnitOfWork work ) { savePartyTypes( work, unmarshalledData ); savePartyRoleTypes( work, unmarshalledData ); savePartyRelationshipTypes( work, unmarshalledData ); saveArtifactTypeGroups( work, unmarshalledData ); saveArtifactTypes( work, unmarshalledData ); saveProtocols( work, unmarshalledData ); } private void saveArtifactTypeGroups( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { ArtifactTypeGroupRepository groupRepository = applicationContext.getRepository( ArtifactTypeGroupRepository.class ); if( businessDefinition.artifactTypeGroups != null ){ for( ArtifactTypeGroup anArtifactTypeGroup : businessDefinition.artifactTypeGroups ){ groupRepository.addArtifactTypeGroup( work, anArtifactTypeGroup ); log.trace( "Artifact type group: '" + anArtifactTypeGroup.getName() + "' was created and saved." ); } } } private void saveArtifactTypes( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { ArtifactTypeRepository artifactTypeRepository = applicationContext.getRepository( ArtifactTypeRepository.class ); if( businessDefinition.artifactTypeGroups != null ){ for( ArtifactTypeGroup anArtifactTypeGroup : businessDefinition.artifactTypeGroups ){ for( ArtifactType anArtifactType : anArtifactTypeGroup.getArtifactTypes() ) { artifactTypeRepository.add( work, anArtifactType ); log.trace( "Artifact type: '" + anArtifactType.getName() + "' was created and saved." ); } } } } private void savePartyRelationshipTypes( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { PartyRelationshipTypeRepository partyRelationshipTypeRepository = applicationContext.getRepository( PartyRelationshipTypeRepository.class ); if( businessDefinition.partyRelationshipTypes != null ){ for( PartyRelationshipType relationshipType : businessDefinition.partyRelationshipTypes ){ partyRelationshipTypeRepository.add( work, relationshipType ); log.trace( "Party relationship type: '" + relationshipType.getName() + "' was created and saved." ); } } } private void savePartyRoleTypes( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { PartyRoleTypeRepository partyRoleTypeRepository = applicationContext.getRepository( PartyRoleTypeRepository.class ); if( businessDefinition.partyRoleTypes != null ){ for( PartyRoleType partyRoleType : businessDefinition.partyRoleTypes ){ partyRoleTypeRepository.addPartyRoleType( work, partyRoleType ); log.trace( "Party role type: '" + partyRoleType.getName() + "' was created and saved." ); } } } private void savePartyTypes( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { PartyTypeRepository partyTypeRepository = applicationContext.getRepository( PartyTypeRepository.class ); if( businessDefinition.partyTypes.size() > 0 ) { for( PartyType partyType : businessDefinition.partyTypes ) { partyTypeRepository.addPartyType( work, partyType ); log.trace( "Party type: '" + partyType.getName() + "' was created and saved." ); } } } private void saveProtocols( DefaultUnitOfWork work, BusinessDefinition businessDefinition ) { ProtocolRepository protocolRepository = applicationContext.getRepository( ProtocolRepository.class ); if( businessDefinition.protocols != null ){ for( LifecycleProtocol lifeCycleProtocol : businessDefinition.protocols.lifecycles ){ protocolRepository.addLifecycle( work, lifeCycleProtocol ); log.trace( "Protocol: '" + lifeCycleProtocol.getName() + "' was created and saved." ); } } } }