All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geojsf.util.db.init.DbLayerInit Maven / Gradle / Ivy

The newest version!
package org.geojsf.util.db.init;

import net.sf.ahtutils.db.ejb.AhtDbEjbUpdater;
import net.sf.ahtutils.exception.ejb.UtilsConstraintViolationException;
import net.sf.ahtutils.exception.ejb.UtilsLockingException;
import net.sf.ahtutils.exception.ejb.UtilsNotFoundException;
import net.sf.ahtutils.exception.processing.UtilsConfigurationException;
import net.sf.ahtutils.factory.ejb.status.EjbDescriptionFactory;
import net.sf.ahtutils.factory.ejb.status.EjbLangFactory;
import net.sf.ahtutils.interfaces.facade.UtilsFacade;
import net.sf.ahtutils.interfaces.model.graphic.UtilsGraphic;
import net.sf.ahtutils.interfaces.model.status.UtilsDescription;
import net.sf.ahtutils.interfaces.model.status.UtilsLang;
import net.sf.ahtutils.interfaces.model.status.UtilsStatus;

import org.geojsf.factory.ejb.EjbGeoLayerFactory;
import org.geojsf.interfaces.facade.GeoJsfFacade;
import org.geojsf.interfaces.model.core.GeoJsfCategory;
import org.geojsf.interfaces.model.core.GeoJsfLayer;
import org.geojsf.interfaces.model.core.GeoJsfMap;
import org.geojsf.interfaces.model.core.GeoJsfService;
import org.geojsf.interfaces.model.core.GeoJsfView;
import org.geojsf.interfaces.model.meta.GeoJsfDataSource;
import org.geojsf.interfaces.model.meta.GeoJsfViewPort;
import org.geojsf.interfaces.model.sld.GeoJsfSld;
import org.geojsf.interfaces.model.sld.GeoJsfSldRule;
import org.geojsf.interfaces.model.sld.GeoJsfSldTemplate;
import org.geojsf.model.xml.geojsf.Layer;
import org.geojsf.model.xml.geojsf.Layers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DbLayerInit ,GT extends UtilsStatus,GS extends UtilsStatus,
							CATEGORY extends GeoJsfCategory,
							SERVICE extends GeoJsfService,
							LAYER extends GeoJsfLayer,
							MAP extends GeoJsfMap,
							VIEW extends GeoJsfView,
							VP extends GeoJsfViewPort,
							DS extends GeoJsfDataSource,
							SLDTEMPLATE extends GeoJsfSldTemplate,
							SLDTYPE extends UtilsStatus,
							SLD extends GeoJsfSld,
							RULE extends GeoJsfSldRule
							>
{
	final static Logger logger = LoggerFactory.getLogger(DbLayerInit.class);
	
	private final Class cCategory;
	private final Class cService;
    private final Class cLayer;
    
    private UtilsFacade fUtils;
    private GeoJsfFacade fGeo;
    
    private EjbLangFactory efLang;
    private EjbDescriptionFactory efDescription;
    private EjbGeoLayerFactory ejbLayerFactory;
    
    private DbViewPortInit dbVpInit;
    
    public DbLayerInit(final Class cL, final Class cD,final Class cCategory, final Class cService, final Class cLayer,final Class cVp,UtilsFacade fUtils, GeoJsfFacade fGeo)
	{       
    	this.cCategory = cCategory;
    	this.cService = cService;
        this.cLayer = cLayer;
        
        this.fUtils=fUtils;
        this.fGeo=fGeo;
		
		efLang = EjbLangFactory.createFactory(cL);
		efDescription = EjbDescriptionFactory.createFactory(cD);
		ejbLayerFactory = EjbGeoLayerFactory.factory(cL, cLayer);
		dbVpInit = DbViewPortInit.factory(cVp,fUtils);
	}
	
	public static ,GT extends UtilsStatus,GS extends UtilsStatus,
					CATEGORY extends GeoJsfCategory,
					SERVICE extends GeoJsfService,
					LAYER extends GeoJsfLayer,
					MAP extends GeoJsfMap,
					VIEW extends GeoJsfView,
					VP extends GeoJsfViewPort,
					DS extends GeoJsfDataSource,
					SLD extends GeoJsfSld,
					RULE extends GeoJsfSldRule,
					SLDTYPE extends UtilsStatus,
					SLDTEMPLATE extends GeoJsfSldTemplate> 
	
		DbLayerInit
		factory(final Class cL, final Class cD,final Class cCategory,final Class cService, final Class cLayer,final Class cVp,UtilsFacade fUtils,GeoJsfFacade fGeo)
	{
		return new DbLayerInit(cL,cD,cCategory,cService,cLayer,cVp,fUtils,fGeo);
	}

	public void iuLayers(Layers layers, String[] langKeys) throws UtilsConfigurationException
	{
		logger.debug("i/u "+Layers.class.getSimpleName()+" with "+layers.getLayer().size()+" "+Layer.class.getSimpleName());
		
		AhtDbEjbUpdater updateLayer = AhtDbEjbUpdater.createFactory(cLayer);
		
		updateLayer.dbEjbs(fUtils.all(cLayer));

		for(Layer layer : layers.getLayer())
		{
			updateLayer.actualAdd(layer.getCode());
			
			SERVICE service;
			CATEGORY category;
			try
			{
				service = fUtils.fByCode(cService, layer.getService().getCode());
				category = fUtils.fByCode(cCategory, layer.getCategory().getCode());
			}
			catch (UtilsNotFoundException e1) {throw new UtilsConfigurationException(e1.getMessage());}			
			
			LAYER ejb;
			try
			{
				ejb = fUtils.fByCode(cLayer,layer.getCode());
				efLang.rmLang(fUtils,ejb);
				efDescription.rmDescription(fUtils,ejb);
				
			}
			catch (UtilsNotFoundException e)
			{
				try
				{
					ejb = ejbLayerFactory.build(layer.getCode(), service, category, langKeys);					
					ejb = (LAYER)fUtils.persist(ejb);
				}

				catch (UtilsConstraintViolationException e2) {throw new UtilsConfigurationException(e2.getMessage());}
			}
			
			try
			{
				ejb.setName(efLang.getLangMap(layer.getLangs()));
				ejb.setDescription(efDescription.create(layer.getDescriptions()));
				
				//TODO can be removed after applied to active projects
				boolean layerSql = false;
				if(layer.isSetSql()){layerSql = layer.isSql();}
				ejb.setSqlLayer(layerSql);
				
				ejb.setTemporalLayer(layer.isTemporal());
				ejb.setService(fUtils.fByCode(cService, layer.getService().getCode()));
				
				ejb=(LAYER)fUtils.update(ejb);
				
				if(layer.isSetViewPort())
				{
					ejb = fGeo.load(cLayer,ejb);
					dbVpInit.iuViewPort(ejb,layer.getViewPort());
				}
			}
			catch (UtilsConstraintViolationException e) {logger.error("",e);}
			catch (UtilsLockingException e) {logger.error("",e);}
			catch (UtilsNotFoundException e) {logger.error("",e);}
		}
		
		updateLayer.remove(fUtils);
		logger.trace("initUpdateUsecaseCategories finished");
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy