/*
* Copyright (C) 2015 University of Dundee. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package ome.formats.importer.targets;
import static omero.rtypes.rstring;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ome.formats.OMEROMetadataStoreClient;
import ome.formats.importer.ImportContainer;
import omero.api.IQueryPrx;
import omero.api.IUpdatePrx;
import omero.model.Dataset;
import omero.model.DatasetI;
import omero.model.IObject;
import omero.model.Screen;
import omero.model.ScreenI;
import omero.sys.ParametersI;
public class ServerTemplateImportTarget extends TemplateImportTarget {
private final String sharedPath;
public ServerTemplateImportTarget(String sharedPath) {
this.sharedPath = sharedPath;
}
@Override
public IObject load(OMEROMetadataStoreClient client, ImportContainer ic) throws Exception {
return load(client, ic.getIsSPW());
}
public IObject load(OMEROMetadataStoreClient client, boolean spw) throws Exception {
IQueryPrx query = client.getServiceFactory().getQueryService();
IUpdatePrx update = client.getServiceFactory().getUpdateService();
log.info("Checking '{}' against '{}'", sharedPath, getTemplate());
Pattern pattern = Pattern.compile(getTemplate());
Matcher m = pattern.matcher(sharedPath);
if (!m.matches()) {
log.warn("No match");
return null;
}
if (!getDiscriminator().matches("^[-+%@]?name$")) {
log.warn("Invalid discriminator: {}", getDiscriminator());
return null;
}
String name = m.group("Container1");
if (name == null || name.trim().length() == 0) {
log.warn("Empty name");
return null;
}
String order = "desc";
if (getDiscriminator().startsWith("-")) {
order = "asc";
}
if (spw) {
Screen screen;
List<IObject> screens = (List<IObject>) query.findAllByQuery(
"select o from Screen as o where o.name = :name"
+ " order by o.id " + order,
new ParametersI().add("name", rstring(name)));
if (screens.size() == 0 || getDiscriminator().startsWith("@")) {
screen = new ScreenI();
screen.setName(omero.rtypes.rstring(name));
screen = (Screen) update.saveAndReturnObject(screen);
} else {
if (getDiscriminator().startsWith("%") && screens.size() > 1) {
log.warn("No unique Screen called {}", name);
return null;
} else {
screen = (Screen) screens.get(0);
}
}
return screen;
} else {
Dataset dataset;
List<IObject> datasets = (List<IObject>) query.findAllByQuery(
"select o from Dataset as o where o.name = :name"
+ " order by o.id " + order,
new ParametersI().add("name", rstring(name)));
if (datasets.size() == 0 || getDiscriminator().startsWith("@")) {
dataset = new DatasetI();
dataset.setName(omero.rtypes.rstring(name));
dataset = (Dataset) update.saveAndReturnObject(dataset);
} else {
if (getDiscriminator().startsWith("%") && datasets.size() > 1) {
log.warn("No unique Dataset called {}", name);
return null;
} else {
dataset = (Dataset) datasets.get(0);
}
}
return dataset;
}
}
}