/** * Copyright (C) 2011 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * 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 2.0 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 org.bonitasoft.web.rest.server; import java.util.logging.Logger; import org.bonitasoft.web.rest.model.tenant.BusinessDataModelDefinition; import org.bonitasoft.web.rest.server.api.application.APIApplication; import org.bonitasoft.web.rest.server.api.applicationmenu.APIApplicationMenu; import org.bonitasoft.web.rest.server.api.applicationpage.APIApplicationDataStoreFactory; import org.bonitasoft.web.rest.server.api.applicationpage.APIApplicationPage; import org.bonitasoft.web.rest.server.api.bonitaPage.APIBonitaPage; import org.bonitasoft.web.rest.server.api.bpm.cases.APIArchivedCase; import org.bonitasoft.web.rest.server.api.bpm.cases.APIArchivedCaseDocument; import org.bonitasoft.web.rest.server.api.bpm.cases.APIArchivedComment; import org.bonitasoft.web.rest.server.api.bpm.cases.APICase; import org.bonitasoft.web.rest.server.api.bpm.cases.APICaseDocument; import org.bonitasoft.web.rest.server.api.bpm.cases.APICaseVariable; import org.bonitasoft.web.rest.server.api.bpm.cases.APIComment; import org.bonitasoft.web.rest.server.api.bpm.connector.APIArchivedConnectorInstance; import org.bonitasoft.web.rest.server.api.bpm.connector.APIConnectorInstance; import org.bonitasoft.web.rest.server.api.bpm.flownode.APIActivity; import org.bonitasoft.web.rest.server.api.bpm.flownode.APIFlowNode; import org.bonitasoft.web.rest.server.api.bpm.flownode.APIHumanTask; import org.bonitasoft.web.rest.server.api.bpm.flownode.APITask; import org.bonitasoft.web.rest.server.api.bpm.flownode.APIUserTask; import org.bonitasoft.web.rest.server.api.bpm.flownode.archive.APIArchivedActivity; import org.bonitasoft.web.rest.server.api.bpm.flownode.archive.APIArchivedFlowNode; import org.bonitasoft.web.rest.server.api.bpm.flownode.archive.APIArchivedHumanTask; import org.bonitasoft.web.rest.server.api.bpm.flownode.archive.APIArchivedTask; import org.bonitasoft.web.rest.server.api.bpm.flownode.archive.APIArchivedUserTask; import org.bonitasoft.web.rest.server.api.bpm.process.APIActor; import org.bonitasoft.web.rest.server.api.bpm.process.APIActorMember; import org.bonitasoft.web.rest.server.api.bpm.process.APICategory; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcess; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcessCategory; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcessConnector; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcessConnectorDependency; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcessParameter; import org.bonitasoft.web.rest.server.api.bpm.process.APIProcessResolutionProblem; import org.bonitasoft.web.rest.server.api.document.APIArchivedDocument; import org.bonitasoft.web.rest.server.api.document.APIDocument; import org.bonitasoft.web.rest.server.api.organization.APICustomUserInfoDefinition; import org.bonitasoft.web.rest.server.api.organization.APICustomUserInfoUser; import org.bonitasoft.web.rest.server.api.organization.APICustomUserInfoValue; import org.bonitasoft.web.rest.server.api.organization.APIGroup; import org.bonitasoft.web.rest.server.api.organization.APIMembership; import org.bonitasoft.web.rest.server.api.organization.APIPersonalContactData; import org.bonitasoft.web.rest.server.api.organization.APIProfessionalContactData; import org.bonitasoft.web.rest.server.api.organization.APIRole; import org.bonitasoft.web.rest.server.api.organization.APIUser; import org.bonitasoft.web.rest.server.api.page.APIPage; import org.bonitasoft.web.rest.server.api.platform.APIPlatform; import org.bonitasoft.web.rest.server.api.profile.APIProfile; import org.bonitasoft.web.rest.server.api.profile.APIProfileEntry; import org.bonitasoft.web.rest.server.api.profile.APIProfileMember; import org.bonitasoft.web.rest.server.api.system.APII18nLocale; import org.bonitasoft.web.rest.server.api.system.APISession; import org.bonitasoft.web.rest.server.api.tenant.APIBusinessDataModel; import org.bonitasoft.web.rest.server.api.tenant.APITenantAdmin; import org.bonitasoft.web.rest.server.datastore.application.ApplicationDataStoreCreator; import org.bonitasoft.web.rest.server.datastore.applicationmenu.ApplicationMenuDataStoreCreator; import org.bonitasoft.web.rest.server.engineclient.CustomUserInfoEngineClientCreator; import org.bonitasoft.web.rest.server.framework.API; import org.bonitasoft.web.rest.server.framework.RestAPIFactory; import org.bonitasoft.web.toolkit.client.common.exception.api.APINotFoundException; import org.bonitasoft.web.toolkit.client.data.item.IItem; /** * @author Séverin Moussel */ public class BonitaRestAPIFactory extends RestAPIFactory { private static Logger LOGGER = Logger.getLogger(BonitaRestAPIFactory.class.getName()); @Override public API<? extends IItem> defineApis(final String apiToken, final String resourceToken) { if ("identity".equals(apiToken)) { if ("user".equals(resourceToken)) { return new APIUser(); } else if ("role".equals(resourceToken)) { return new APIRole(); } else if ("group".equals(resourceToken)) { return new APIGroup(); } else if ("membership".equals(resourceToken)) { return new APIMembership(); } else if ("professionalcontactdata".equals(resourceToken)) { return new APIProfessionalContactData(); } else if ("personalcontactdata".equals(resourceToken)) { return new APIPersonalContactData(); } } else if("customuserinfo".equals(apiToken)) { if("definition".equals(resourceToken)) { return new APICustomUserInfoDefinition(new CustomUserInfoEngineClientCreator()); } else if("user".equals(resourceToken)) { return new APICustomUserInfoUser(new CustomUserInfoEngineClientCreator()); } else if("value".equals(resourceToken)) { return new APICustomUserInfoValue(new CustomUserInfoEngineClientCreator()); } } else if ("system".equals(apiToken)) { if ("i18nlocale".equals(resourceToken)) { return new APII18nLocale(); } else if ("session".equals(resourceToken)) { return new APISession(); } else if ("tenant".equals(resourceToken)) { return new APITenantAdmin(); } // FIXME : userXP deprecated (BS-500) // - replaced by 'portal' // - Do not add any API here // - userXP section must be deleted in 6.4.0 version // - duplication not removed because userXp must stay like this } else if ("userXP".equals(apiToken)) { if ("profile".equals(resourceToken)) { LOGGER.warning("Deprecated API path, please use /API/portal/profile instead"); return new APIProfile(); } else if ("profileEntry".equals(resourceToken)) { LOGGER.warning("Deprecated API path, please use /API/portal/profileEntry instead"); return new APIProfileEntry(); } else if ("profileMember".equals(resourceToken)) { LOGGER.warning("Deprecated API path, please use /API/portal/profileMember instead"); return new APIProfileMember(); } else if ("bonitaPage".equals(resourceToken)) { return new APIBonitaPage(); } // -------------------------------------------------------- } else if ("portal".equals(apiToken)) { if ("profile".equals(resourceToken)) { return new APIProfile(); } else if ("profileEntry".equals(resourceToken)) { return new APIProfileEntry(); } else if ("profileMember".equals(resourceToken)) { return new APIProfileMember(); } else if ("bonitaPage".equals(resourceToken)) { return new APIBonitaPage(); } else if ("page".equals(resourceToken)) { return new APIPage(); } } else if ("bpm".equals(apiToken)) { if ("humanTask".equals(resourceToken)) { return new APIHumanTask(); } else if ("userTask".equals(resourceToken)) { return new APIUserTask(); } else if ("archivedHumanTask".equals(resourceToken)) { return new APIArchivedHumanTask(); } else if ("archivedUserTask".equals(resourceToken)) { return new APIArchivedUserTask(); } else if ("process".equals(resourceToken)) { return new APIProcess(); } else if ("category".equals(resourceToken)) { return new APICategory(); } else if ("processCategory".equals(resourceToken)) { return new APIProcessCategory(); } else if ("processConnector".equals(resourceToken)) { return new APIProcessConnector(); } else if ("case".equals(resourceToken)) { return new APICase(); } else if ("archivedCase".equals(resourceToken)) { return new APIArchivedCase(); } else if ("comment".equals(resourceToken)) { return new APIComment(); } else if ("archivedComment".equals(resourceToken)) { return new APIArchivedComment(); } else if ("document".equals(resourceToken)) { return new APIDocument(); } else if ("archiveddocument".equals(resourceToken)) { return new APIArchivedDocument(); } else if ("actor".equals(resourceToken)) { return new APIActor(); } else if ("actorMember".equals(resourceToken)) { return new APIActorMember(); } else if ("delegation".equals(resourceToken)) { return new APIActorMember(); } else if ("activity".equals(resourceToken)) { return new APIActivity(); } else if ("archivedActivity".equals(resourceToken)) { return new APIArchivedActivity(); } else if ("task".equals(resourceToken)) { return new APITask(); } else if ("archivedTask".equals(resourceToken)) { return new APIArchivedTask(); } else if ("flowNode".equals(resourceToken)) { return new APIFlowNode(); } else if ("archivedFlowNode".equals(resourceToken)) { return new APIArchivedFlowNode(); } else if ("processResolutionProblem".equals(resourceToken)) { return new APIProcessResolutionProblem(); } else if ("caseDocument".equals(resourceToken)) { return new APICaseDocument(); } else if ("archivedCaseDocument".equals(resourceToken)) { return new APIArchivedCaseDocument(); } else if ("connectorInstance".equals(resourceToken)) { return new APIConnectorInstance(); } else if ("archivedConnectorInstance".equals(resourceToken)) { return new APIArchivedConnectorInstance(); } else if ("processConnectorDependency".equals(resourceToken)) { return new APIProcessConnectorDependency(); } else if ("caseVariable".equals(resourceToken)) { return new APICaseVariable(); } else if ("document".equals(resourceToken)) { return new APIDocument(); } else if ("archiveddocument".equals(resourceToken)) { return new APIArchivedDocument(); } else if ("processParameter".equals(resourceToken)) { return new APIProcessParameter(); } } else if ("living".equals(apiToken)) { if ("application".equals(resourceToken)) { return new APIApplication(new ApplicationDataStoreCreator(), new APIApplicationDataStoreFactory()); } else if ("application-page".equals(resourceToken)) { return new APIApplicationPage(new APIApplicationDataStoreFactory()); } else if ("application-menu".equals(resourceToken)) { return new APIApplicationMenu(new ApplicationMenuDataStoreCreator()); } } else if ("tenant".equals(apiToken)) { if (BusinessDataModelDefinition.TOKEN.equals(resourceToken)) { return new APIBusinessDataModel(); } } else if ("platform".equals(apiToken)) { if ("platform".equals(resourceToken)) { return new APIPlatform(); } } throw new APINotFoundException(apiToken, resourceToken); } }