/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.constellation.process.service; import org.constellation.process.AbstractCstlProcess; import org.constellation.provider.DataProvider; import org.constellation.provider.DataProviders; import org.constellation.provider.coveragesgroup.CoveragesGroupProvider; import org.constellation.provider.coveragesgroup.xml.*; import org.geotoolkit.process.ProcessException; import org.opengis.parameter.ParameterValueGroup; import javax.xml.bind.JAXBException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static org.constellation.process.service.RemoveDataFromMapContextDescriptor.*; import org.geotoolkit.util.NamesExt; import static org.geotoolkit.parameter.Parameters.getOrCreate; import org.opengis.util.GenericName; /** * * @author Quentin Boileau (Geomatys) */ public class RemoveDataFromMapContext extends AbstractCstlProcess { public RemoveDataFromMapContext(final ParameterValueGroup input) { super(INSTANCE,input); } /** * Quick constructor * @param providerID * @param groupName * @param layerName * @param layerProvider */ public RemoveDataFromMapContext (final String providerID, final String groupName, final String layerName, final String layerProvider) { this(toParameters(providerID, groupName, layerName, layerProvider)); } private static ParameterValueGroup toParameters(final String providerID, final String groupName, final String layerName, final String layerProvider){ final ParameterValueGroup params = INSTANCE.getInputDescriptor().createValue(); getOrCreate(CONTEXT_PROVIDER_ID, params).setValue(providerID); getOrCreate(CONTEXT_NAME, params).setValue(groupName); getOrCreate(DATA_NAME, params).setValue(layerName); getOrCreate(DATA_PROVIDER_ID, params).setValue(layerProvider); return params; } @Override protected void execute() throws ProcessException { fireProcessStarted("Start remove to map Context"); final String providerID = getOrCreate(CONTEXT_PROVIDER_ID, inputParameters).stringValue(); final String groupName = getOrCreate(CONTEXT_NAME, inputParameters).stringValue(); final String layerName = getOrCreate(DATA_NAME, inputParameters).stringValue(); final String layerProvider = getOrCreate(DATA_PROVIDER_ID, inputParameters).stringValue(); final DataProvider p = DataProviders.getInstance().getProvider(providerID); if (p != null && p instanceof CoveragesGroupProvider) { final CoveragesGroupProvider coveragesGroupProvider = (CoveragesGroupProvider) p; final DataReference dataRef = new DataReference("${providerLayerType|" + layerProvider + "|" + layerName + "}"); try { final GenericName key = NamesExt.create(groupName); MapContext rawMapContext = coveragesGroupProvider.getRawMapContext(key); if (rawMapContext == null) { throw new ProcessException("MapContext configuration not found for key : "+groupName,this, null); } List<MapItem> items = rawMapContext.getMapItem().getMapItems(); List<MapItem> toRemove = new ArrayList<>(); for (MapItem item : items) { if (item instanceof MapLayer && ((MapLayer)item).getDataReference().equals(dataRef)) { toRemove.add(item); } } rawMapContext.getMapItem().getMapItems().removeAll(toRemove); coveragesGroupProvider.addRawMapContext(key, rawMapContext); DataProviders.getInstance().getProvider(providerID).reload(); } catch (JAXBException | IOException ex) { throw new ProcessException("JAXB error during add data to map context", this, ex); } } else { throw new ProcessException("Unable to find a provider:" + providerID, this, null); } } }