/* * Copyright (C) 2005-2014 Alfresco Software Limited. * * This file is part of Alfresco * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. */ package org.alfresco.bm.dataload.rm.site; import static org.alfresco.bm.data.DataCreationState.Created; import static org.alfresco.bm.data.DataCreationState.Scheduled; import static org.alfresco.bm.dataload.rm.role.RMRole.ADMINISTRATOR; import static org.alfresco.bm.site.SiteVisibility.PUBLIC; import java.util.ArrayList; import java.util.List; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DBObject; import org.alfresco.bm.event.AbstractEventProcessor; import org.alfresco.bm.event.Event; import org.alfresco.bm.event.EventResult; import org.alfresco.bm.restapi.RestAPIFactory; import org.alfresco.bm.site.SiteData; import org.alfresco.bm.site.SiteDataService; import org.alfresco.bm.site.SiteMemberData; import org.alfresco.bm.user.UserData; import org.alfresco.bm.user.UserDataService; import org.springframework.beans.factory.annotation.Autowired; /** * Prepare event for RM Site creation * * @author Michael Suzuki * @author Derek Hulley * @author Tuna Aksoy * @since 1.0 */ public class PrepareRMSite extends AbstractEventProcessor { public static final String RM_SITE_DESC = "Records Management Site"; public static final String RM_SITE_PRESET = "rm-site-dashboard"; public static final String RM_SITE_ID = "rm"; public static final String RM_SITE_TITLE = "Records Management"; public static final String RM_SITE_DOMAIN = "default"; public static final String RM_SITE_GUID = RM_SITE_ID; public static final String RM_SITE_TYPE = "{http://www.alfresco.org/model/recordsmanagement/1.0}rmsite"; public static final String RM_SITE_VISIBILITY = PUBLIC.toString(); public static final String FIELD_SITE_ID = "siteId"; public static final String FIELD_SITE_MANAGER = "siteManager"; public static final String FIELD_ONLY_DB_LOAD = "onlyDbLoad"; public static final String DEFAULT_EVENT_NAME_RM_SITE_PREPARED = "rmSitePrepared"; @Autowired private UserDataService userDataService; @Autowired private SiteDataService siteDataService; @Autowired private RestAPIFactory restAPIFactory; private boolean createRMSite = false; private String eventNameRMSitePrepared = DEFAULT_EVENT_NAME_RM_SITE_PREPARED; private String eventNameLoadRMSiteIntoDB = "loadRMSiteIntoDB"; private String eventNameContinueLoadingData = "scheduleFilePlanLoaders"; private String username; private String password; /** * @return the createRMSite */ public boolean isCreateRMSite() { return this.createRMSite; } /** * @param createRMSite the createRMSite to set */ public void setCreateRMSite(boolean createRMSite) { this.createRMSite = createRMSite; } /** * @return the eventNameRMSitePrepared */ public String getEventNameRMSitePrepared() { return this.eventNameRMSitePrepared; } /** * Override the {@link #DEFAULT_EVENT_NAME_RM_SITE_PREPARED default} event name when sites have been created. */ public void setEventNameRMSitePrepared(String eventNameRMSitePrepared) { this.eventNameRMSitePrepared = eventNameRMSitePrepared; } public String getEventNameLoadRMSiteIntoDB() { return eventNameLoadRMSiteIntoDB; } public void setEventNameLoadRMSiteIntoDB(String eventNameLoadRMSiteIntoDB) { this.eventNameLoadRMSiteIntoDB = eventNameLoadRMSiteIntoDB; } public String getEventNameContinueLoadingData() { return eventNameContinueLoadingData; } public void setEventNameContinueLoadingData(String eventNameContinueLoadingData) { this.eventNameContinueLoadingData = eventNameContinueLoadingData; } /** * @return the username */ public String getUsername() { return this.username; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } /** * @return the password */ public String getPassword() { return this.password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } /** * @see org.alfresco.bm.event.AbstractEventProcessor#processEvent(org.alfresco.bm.event.Event) */ @Override protected EventResult processEvent(Event event) throws Exception { StringBuilder msg = new StringBuilder("Preparing Records Management: \n"); List<Event> events = new ArrayList<Event>(10); UserData rmAdmin = userDataService.findUserByUsername(getUsername()); if (rmAdmin == null) { rmAdmin = new UserData(); rmAdmin.setCreationState(Created); rmAdmin.setDomain(RM_SITE_DOMAIN); rmAdmin.setUsername(getUsername()); rmAdmin.setPassword(getPassword()); userDataService.createNewUser(rmAdmin); } else { // Check for creation if (rmAdmin.getCreationState() != Created) { userDataService.setUserCreationState(getUsername(), Created); msg.append(" Updating user " + getUsername() + " state to created.\n"); } } boolean existsRMSite = restAPIFactory.getRMSiteAPI(getUsername()).existsRMSite(); //rm site does not exists and we don't want to create it if (!existsRMSite && !isCreateRMSite()) { return new EventResult("RM Site creation not wanted.", false); } SiteData rmSite = siteDataService.getSite(RM_SITE_ID); if(rmSite == null) { // Create data rmSite = new SiteData(); rmSite.setSiteId(RM_SITE_ID); rmSite.setTitle(RM_SITE_TITLE); rmSite.setGuid(RM_SITE_GUID); rmSite.setDomain(RM_SITE_DOMAIN); rmSite.setDescription(RM_SITE_DESC); rmSite.setSitePreset(RM_SITE_PRESET); rmSite.setVisibility(RM_SITE_VISIBILITY); rmSite.setType(RM_SITE_TYPE); rmSite.setCreationState(Scheduled); siteDataService.addSite(rmSite); msg.append(" Added RM site '" + RM_SITE_ID + "' as created.\n"); // Record the administrator SiteMemberData rmAdminMember = new SiteMemberData(); rmAdminMember.setCreationState(Created); rmAdminMember.setRole(ADMINISTRATOR.toString()); rmAdminMember.setSiteId(RM_SITE_ID); rmAdminMember.setUsername(getUsername()); siteDataService.addSiteMember(rmAdminMember); msg.append(" Added user '" + getUsername() + "' RM administrator.\n"); } BasicDBObjectBuilder builder = BasicDBObjectBuilder.start(); builder.add(FIELD_SITE_ID, rmSite.getSiteId()) .add(FIELD_SITE_MANAGER, getUsername()); //rm site exists and it is loaded in mongo db if(existsRMSite && rmSite.getCreationState() == Created) { return new EventResult("RM Site already created, continue loading data.", new Event(getEventNameContinueLoadingData(), null)); } //rm sites exists and it is not loaded in mongo db if(existsRMSite && rmSite.getCreationState() != Created) { builder.add(FIELD_ONLY_DB_LOAD, true); DBObject data = builder.get(); events.add(new Event(getEventNameLoadRMSiteIntoDB(), data)); } //rm sites does not exists and will be created if(!existsRMSite) { DBObject data = builder.get(); events.add(new Event(getEventNameRMSitePrepared(), data)); } // Done return new EventResult(msg.toString(), events); } }