/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.neo.providers.internal;
import org.amanzi.neo.models.statistics.IPropertyStatisticsModel;
import org.amanzi.neo.nodeproperties.IGeneralNodeProperties;
import org.amanzi.neo.nodeproperties.IGeoNodeProperties;
import org.amanzi.neo.nodeproperties.IMeasurementNodeProperties;
import org.amanzi.neo.nodeproperties.INetworkNodeProperties;
import org.amanzi.neo.nodeproperties.INodeProperties;
import org.amanzi.neo.nodeproperties.ITimePeriodNodeProperties;
import org.amanzi.neo.providers.ContextException;
import org.amanzi.neo.providers.IDriveModelProvider;
import org.amanzi.neo.providers.INetworkModelProvider;
import org.amanzi.neo.providers.IProjectModelProvider;
import org.amanzi.neo.providers.IProviderContext;
import org.amanzi.neo.providers.context.ProviderContextImpl;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* TODO Purpose of
* <p>
* </p>
*
* @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com)
* @since 1.0.0
*/
public abstract class AbstractProviderPlugin extends AbstractUIPlugin {
private static final Logger LOGGER = Logger.getLogger(AbstractProviderPlugin.class);
private static final String PROJECT_MODEL_PROVIDER_ID = "org.amanzi.providers.ProjectModelProvider";
private static final String PROPERTY_STATISTICS_MODEL_PROVIDER_ID = "org.amanzi.providers.PropertyStatisticsModelProvider";
private static final String NETWORK_MODEL_PROVIDER_ID = "org.amanzi.provider.NetworkModelProvider";
private static final String GENERAL_NODE_PROPERTIES_ID = "org.amanzi.nodeproperties.generalnodeproperties";
private static final String NETWORK_NODE_PROPERTIES_ID = "org.amanzi.nodeproperties.NetworkNodeProperties";
private static final String GEO_NODE_PROPERTIES_ID = "org.amanzi.nodeproperties.GeoNodeProperties";
private static final String TIME_PERIOD_NODE_PROPERTIES_ID = "org.amanzi.nodeproperties.TimePeriodNodeProperties";
private static final String MEASUREMENT_NODE_PROPERTIES_ID = "org.amanzi.nodeproperties.MeasurementNodeProperties";
private static final String DRIVE_MODEL_PROVIDER_ID = "org.amanzi.provider.DriveModelProvider";
private static class ProviderContextHolder {
private static volatile IProviderContext context = new ProviderContextImpl();
}
protected IProviderContext getContext() {
return ProviderContextHolder.context;
}
protected <T extends IModelProvider< ? >> T getModelProvider(final String id) {
try {
return getContext().get(id);
} catch (final ContextException e) {
logError(e);
}
return null;
}
private <T extends INodeProperties> T getNodeProperties(final String id) {
try {
return getContext().getProperties(id);
} catch (final ContextException e) {
logError(e);
PlatformUI.getWorkbench().close();
}
return null;
}
private void logError(final ContextException e) {
final String message = "An error occured on initialization Provider context";
LOGGER.fatal(message, e);
getLog().log(new Status(IStatus.ERROR, getPluginId(), message, e));
}
public IProjectModelProvider getProjectModelProvider() {
return getModelProvider(PROJECT_MODEL_PROVIDER_ID);
}
public IPropertyStatisticsModel getPropertyStatisticsModelProvider() {
return getModelProvider(PROPERTY_STATISTICS_MODEL_PROVIDER_ID);
}
public INetworkModelProvider getNetworkModelProvider() {
return getModelProvider(NETWORK_MODEL_PROVIDER_ID);
}
public IGeneralNodeProperties getGeneralNodeProperties() {
return getNodeProperties(GENERAL_NODE_PROPERTIES_ID);
}
public INetworkNodeProperties getNetworkNodeProperties() {
return getNodeProperties(NETWORK_NODE_PROPERTIES_ID);
}
public IDriveModelProvider getDriveModelProvider() {
return getModelProvider(DRIVE_MODEL_PROVIDER_ID);
}
public IGeoNodeProperties getGeoNodeProperties() {
return getNodeProperties(GEO_NODE_PROPERTIES_ID);
}
public ITimePeriodNodeProperties getTimePeriodNodeProperties() {
return getNodeProperties(TIME_PERIOD_NODE_PROPERTIES_ID);
}
public IMeasurementNodeProperties getMeasurementNodeProperties() {
return getNodeProperties(MEASUREMENT_NODE_PROPERTIES_ID);
}
public abstract String getPluginId();
}