/* * Constellation - An open source and standard compliant SDI * http://www.constellation-sdi.org * * Copyright 2014 Geomatys. * * 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 org.constellation.metadata.process; import org.constellation.ServiceDef; import org.constellation.configuration.ConfigurationException; import org.constellation.metadata.configuration.CSWConfigurer; import org.constellation.process.AbstractCstlProcess; import org.constellation.ws.ServiceConfigurer; import org.geotoolkit.process.ProcessDescriptor; import org.geotoolkit.process.ProcessException; import org.opengis.parameter.ParameterValueGroup; import java.io.File; import static org.constellation.metadata.process.AddMetadataDescriptor.*; import org.constellation.ws.CstlServiceException; import org.constellation.ws.Refreshable; import org.constellation.ws.WSEngine; import static org.geotoolkit.parameter.Parameters.getOrCreate; import static org.geotoolkit.parameter.Parameters.value; /** * * @author Guilhem Legal (Geomatys) * @author Quentin Boileau (Geomatys) */ public class AddMetadaProcess extends AbstractCstlProcess { public AddMetadaProcess(final ProcessDescriptor desc, final ParameterValueGroup parameter) { super(desc, parameter); } public AddMetadaProcess(String serviceID, String metadataID, File metadataFile, final Boolean refresh) { this(INSTANCE, toParameter(serviceID, metadataID, metadataFile, refresh)); } private static ParameterValueGroup toParameter(String serviceID, String metadataID, File metadataFile, final Boolean refresh) { ParameterValueGroup params = INSTANCE.getInputDescriptor().createValue(); getOrCreate(METADATA_FILE, params).setValue(metadataFile); getOrCreate(METADATA_ID, params).setValue(metadataID); getOrCreate(SERVICE_IDENTIFIER, params).setValue(serviceID); getOrCreate(REFRESH, params).setValue(refresh); return params; } @Override protected void execute() throws ProcessException { final String serviceID = value(SERVICE_IDENTIFIER, inputParameters); final String metadataID = value(METADATA_ID, inputParameters); final File metadataFile = value(METADATA_FILE, inputParameters); final Boolean refresh = value(REFRESH, inputParameters); try { final CSWConfigurer configurer = (CSWConfigurer) ServiceConfigurer.newInstance(ServiceDef.Specification.CSW); configurer.importRecords(serviceID, metadataFile, metadataFile.getName()); if (refresh) { final Refreshable worker = (Refreshable) WSEngine.getInstance("CSW", serviceID); if (worker != null) { worker.refresh(); } } } catch (ConfigurationException | CstlServiceException ex) { throw new ProcessException(null, this, ex); } } }