/*
* Copyright (C) 2010 Jan Pokorsky
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
package cz.incad.kramerius.editor.server;
import cz.incad.kramerius.KrameriusModels;
import cz.incad.kramerius.editor.share.GWTKrameriusObject;
import cz.incad.kramerius.editor.share.GWTKrameriusObject.Kind;
import cz.incad.kramerius.relation.Relation;
import cz.incad.kramerius.relation.RelationUtils;
import cz.incad.kramerius.relation.RelationModel;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author Jan Pokorsky
*/
public class HandlerTestUtils {
public static GWTKrameriusObjectBuilder createGWTObject(String pid, Kind kind, Map<String, String> properties) {
return new GWTKrameriusObjectBuilder(
new GWTKrameriusObject(
pid, kind, properties,
new EnumMap<Kind, List<GWTKrameriusObject>>(Kind.class)
));
}
public static GWTKrameriusObject createGWTObject(String pid, Kind kind, Map<String, String> properties,
List<GWTKrameriusObject>... relations) {
Map<Kind, List<GWTKrameriusObject>> relsMap =
new EnumMap<Kind, List<GWTKrameriusObject>>(Kind.class);
for (int i = 0; i < relations.length; i++) {
List<GWTKrameriusObject> kindRelations = relations[i];
relsMap.put(kindRelations.get(0).getKind(), kindRelations);
}
return new GWTKrameriusObject(pid, kind, properties, null);
}
public static List<GWTKrameriusObject> createGWTRelations(Kind relKind, String... relParams) {
if (relParams.length % 2 != 0) {
throw new IllegalArgumentException("wrong params; expected format is relKind, [pid,title]*");
}
List<GWTKrameriusObject> objs = new ArrayList<GWTKrameriusObject>(relParams.length / 2);
for (int i = 0, length = relParams.length, pos = 1; i < length; pos++) {
String pid = relParams[i++];
String title = relParams[i++];
Map<String, String> properties = new HashMap<String, String>();
properties.put("title", title);
objs.add(new GWTKrameriusObject(pid, relKind, pos, properties));
}
return objs;
}
public static final class GWTKrameriusObjectBuilder {
private GWTKrameriusObject gko;
public GWTKrameriusObjectBuilder(String pid, Kind kind,Map<String, String> properties) {
this(new GWTKrameriusObject(pid, kind, properties,
new EnumMap<Kind, List<GWTKrameriusObject>>(Kind.class)));
}
private GWTKrameriusObjectBuilder(GWTKrameriusObject gko) {
this.gko = gko;
}
public GWTKrameriusObjectBuilder addRelations(Kind relKind, String... relParams) {
gko.setRelations(relKind, createGWTRelations(relKind, relParams));
return this;
}
public GWTKrameriusObject toInstance() {
return gko;
}
}
public static final class RelationModelBuilder {
private RelationModel model;
public RelationModelBuilder(String pid, KrameriusModels kind) {
this(RelationUtils.emptyModel(pid, kind));
}
private RelationModelBuilder(RelationModel model) {
this.model = model;
}
public RelationModelBuilder addRelations(KrameriusModels relKind, String... pids) {
model.addRelationKind(relKind);
List<Relation> relations = model.getRelations(relKind);
for (int i = 0; i < pids.length; i++) {
String pid = pids[i];
relations.add(new Relation(pid, relKind));
}
return this;
}
public RelationModel toInstance() {
return model;
}
}
}