/*
* ###
* Phresco Framework
*
* Copyright (C) 1999 - 2012 Photon Infotech Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ###
*/
package com.photon.phresco.framework;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.framework.api.CIManager;
import com.photon.phresco.framework.api.ProjectAdministrator;
import com.photon.phresco.framework.api.ProjectRuntimeManager;
import com.photon.phresco.framework.api.ServiceManager;
import com.photon.phresco.framework.api.UpdateManager;
import com.photon.phresco.framework.api.Validator;
import com.photon.phresco.framework.validators.AndroidValidator;
import com.photon.phresco.framework.validators.ArchetypeValidator;
import com.photon.phresco.framework.validators.DrupalValidator;
import com.photon.phresco.framework.validators.EnvironmentValidator;
import com.photon.phresco.framework.validators.NodejsValidator;
import com.photon.phresco.framework.validators.PhpValidator;
import com.photon.phresco.util.TechnologyTypes;
public class PhrescoFrameworkFactory {
private PhrescoFrameworkFactory(){
//restrict initialization
}
//TODO:Can we read this from a property file?
private static final String PROJECT_ADMINISTRATOR_IMPL = "com.photon.phresco.framework.impl.ProjectAdministratorImpl";
private static final String PROJECT_RUNTIME_MANAGER_IMPL = "com.photon.phresco.framework.impl.ProjectRuntimeManagerImpl";
private static final String SERVICE_MANAGER_IMPL = "com.photon.phresco.framework.impl.ServiceManagerImpl";
private static final String CI_MANAGER_IMPL = "com.photon.phresco.framework.impl.CIManagerImpl";
private static final String UPDATE_MANAGER_IMPL = "com.photon.phresco.framework.impl.UpdateManagerImpl";
private static FrameworkConfiguration frameworkConfig = null;
private static ProjectAdministrator administrator = null;
private static ProjectRuntimeManager runtimeManager = null;
private static ServiceManager serviceManager = null;
private static CIManager ciManager = null;
private static UpdateManager updateManager = null;
private static final String FRAMEWORK_CONFIG = "framework.config";
private static final Map<String, List<Validator>> VALIDATORSMAP = new HashMap<String, List<Validator>>(32);
public static FrameworkConfiguration getFrameworkConfig() throws PhrescoException {
if(frameworkConfig == null) {
frameworkConfig = new FrameworkConfiguration(FRAMEWORK_CONFIG);
}
return frameworkConfig;
}
public static ProjectAdministrator getProjectAdministrator() throws PhrescoException {
if (administrator == null) {
administrator = (ProjectAdministrator) constructClass(PROJECT_ADMINISTRATOR_IMPL);
}
return administrator;
}
private static Object constructClass(String className) throws PhrescoException {
try {
@SuppressWarnings("rawtypes")
Class clazz = Class.forName(className);
return clazz.newInstance();
} catch (ClassNotFoundException e) {
throw new PhrescoException(e);
} catch (InstantiationException e) {
throw new PhrescoException(e);
} catch (IllegalAccessException e) {
throw new PhrescoException(e);
}
}
public static ProjectRuntimeManager getProjectRuntimeManager() throws PhrescoException {
if (runtimeManager == null) {
runtimeManager = (ProjectRuntimeManager) constructClass(PROJECT_RUNTIME_MANAGER_IMPL);
}
return runtimeManager;
}
public static ServiceManager getServiceManager() throws PhrescoException {
if (serviceManager == null) {
serviceManager = (ServiceManager) constructClass(SERVICE_MANAGER_IMPL);
}
return serviceManager;
}
public static CIManager getCIManager() throws PhrescoException {
if (ciManager == null) {
ciManager = (CIManager) constructClass(CI_MANAGER_IMPL);
}
return ciManager;
}
public static UpdateManager getUpdateManager() throws PhrescoException {
if (updateManager == null) {
updateManager = (UpdateManager) constructClass(UPDATE_MANAGER_IMPL);
}
return updateManager;
}
public static List<Validator> getValidators(String techId) throws PhrescoException {
if (VALIDATORSMAP.isEmpty()) {
initValidators();
}
//TODO:
// if (action == null) {
// return allValidators;
// }
//TODO:Use the incoming tech id
return VALIDATORSMAP.get(techId);
}
//TODO:This initialization should happen dynamically from the service
private static void initValidators() throws PhrescoException {
EnvironmentValidator envValidator = new EnvironmentValidator();
List<Validator> allValidators = new ArrayList<Validator>(8);
allValidators.add(envValidator);
VALIDATORSMAP.put(TechnologyTypes.ALL_TECHS, allValidators);
//Validators for PHP Technology
PhpValidator phpValidator = new PhpValidator();
ArchetypeValidator archetypeValidator = new ArchetypeValidator();
List<Validator> phpValidators = new ArrayList<Validator>(8);
phpValidators.add(phpValidator);
phpValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.PHP, phpValidators);
//Validators for DRUPAL Technology
DrupalValidator drupalValidator = new DrupalValidator();
List<Validator> drupalValidators = new ArrayList<Validator>(8);
List<Validator> drupal6Validators = new ArrayList<Validator>(8);
drupalValidators.add(drupalValidator);
drupalValidators.add(archetypeValidator);
drupal6Validators.add(envValidator);
VALIDATORSMAP.put(TechnologyTypes.PHP_DRUPAL7, drupalValidators);
VALIDATORSMAP.put(TechnologyTypes.PHP_DRUPAL6, drupalValidators);
//Validators for Android Native and Android Hybrid Technology
AndroidValidator androidValidator = new AndroidValidator();
List<Validator> androidValidators = new ArrayList<Validator>(8);
androidValidators.add(androidValidator);
androidValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.ANDROID_NATIVE, androidValidators);
VALIDATORSMAP.put(TechnologyTypes.ANDROID_HYBRID, androidValidators);
//Validators for NodejsValidator Technology
NodejsValidator nodeJSValidator = new NodejsValidator();
List<Validator> nodeJSValidators = new ArrayList<Validator>(8);
nodeJSValidators.add(nodeJSValidator);
nodeJSValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.NODE_JS_WEBSERVICE, nodeJSValidators);
//Validators for SHAREPOINT Technology
List<Validator> sharPointValidators = new ArrayList<Validator>(8);
sharPointValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.SHAREPOINT, sharPointValidators);
//Validators for DOTNETTechnology
List<Validator> dotNetValidators = new ArrayList<Validator>(8);
dotNetValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.DOT_NET, dotNetValidators);
//Validators for JAVA WEB SERVICE Technology
List<Validator> javaWebService = new ArrayList<Validator>(8);
javaWebService.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.JAVA_WEBSERVICE, javaWebService);
//Validators for JAVA Technology
List<Validator> java = new ArrayList<Validator>(8);
java.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.JAVA, java);
//Validators for JAVA STAND ALONE Technology
List<Validator> javaStandAlone = new ArrayList<Validator>(8);
javaStandAlone.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.JAVA_STANDALONE, javaStandAlone);
//Validators for HTML5 Technology
List<Validator> html5 = new ArrayList<Validator>(8);
html5.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.HTML5, html5);
//Validators for HTML5 Technology
List<Validator> html5MobileWidget = new ArrayList<Validator>(8);
html5MobileWidget.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.HTML5_MOBILE_WIDGET, html5MobileWidget);
//Validators for HTML5_MULTICHANNEL_JQUERY_WIDGET Technology
List<Validator> html5MultichannelWiddget = new ArrayList<Validator>(8);
html5MultichannelWiddget.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET, html5MultichannelWiddget);
//Validators for HTML5_WIDGET Technology
List<Validator> html5Widdget = new ArrayList<Validator>(8);
html5Widdget.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.HTML5_WIDGET, html5Widdget);
//Validators for IphoneHybrid Technology
List<Validator> IphoneHybrid = new ArrayList<Validator>(8);
IphoneHybrid.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.IPHONE_HYBRID, IphoneHybrid);
//Validators for IphoneNative Technology
List<Validator> IphoneNative = new ArrayList<Validator>(8);
IphoneNative.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.IPHONE_NATIVE, IphoneNative);
//Validators for WordPress Technology
List<Validator> wordPressValidators = new ArrayList<Validator>(8);
wordPressValidators.add(archetypeValidator);
VALIDATORSMAP.put(TechnologyTypes.WORDPRESS, wordPressValidators);
}
}