/*******************************************************************************
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* 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 hr.fer.zemris.vhdllab.applets.editor.schema2.model.serialization;
import hr.fer.zemris.vhdllab.applets.editor.schema2.misc.WireSegment;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.SchemaInfo;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.SchemaWire;
import hr.fer.zemris.vhdllab.applets.editor.schema2.predefined.beans.ComponentWrapper;
import hr.fer.zemris.vhdllab.applets.editor.schema2.predefined.beans.ParameterWrapper;
import hr.fer.zemris.vhdllab.applets.editor.schema2.predefined.beans.PortWrapper;
import hr.fer.zemris.vhdllab.applets.editor.schema2.predefined.beans.SchemaPortWrapper;
import java.io.Reader;
import org.apache.commons.digester.Digester;
public class SchemaDeserializer {
/* static fields */
/* private fields */
/* ctors */
public SchemaDeserializer() {
}
/* methods */
private void setRules_v1(Digester digester) {
// schema info
digester.addObjectCreate("schemaInfo", SchemaInfo.class);
// wires
digester.addObjectCreate("schemaInfo/wires/schemaWire", SchemaWire.class);
digester.addObjectCreate("schemaInfo/wires/schemaWire/segments/segment", WireSegment.class);
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/segments/segment/x1", "x1");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/segments/segment/y1", "y1");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/segments/segment/x2", "x2");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/segments/segment/y2", "y2");
digester.addSetNext("schemaInfo/wires/schemaWire/segments/segment", "addWireSegment");
digester.addCallMethod("schemaInfo/wires/schemaWire/drawerName", "setDrawer", 1);
digester.addCallParam("schemaInfo/wires/schemaWire/drawerName", 0);
digester.addObjectCreate("schemaInfo/wires/schemaWire/parameters/parameter", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/paramClassName", "paramClassName");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/generic", "generic");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/paramType", "paramType");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/name", "name");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/value", "value");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/valueType", "valueType");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/allowedValues", "allowedValues");
digester.addBeanPropertySetter("schemaInfo/wires/schemaWire/parameters/parameter/eventName", "eventName");
digester.addSetNext("schemaInfo/wires/schemaWire/parameters/parameter", "addParameter");
digester.addSetNext("schemaInfo/wires/schemaWire", "addWire");
// components
digester.addObjectCreate("schemaInfo/components/schemaComponent", ComponentWrapper.class);
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/componentClassName", "componentClassName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/x", "x");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/y", "y");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/width", "width");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/height", "height");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/componentName", "componentName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/codeFileName", "codeFileName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/categoryName", "categoryName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/drawerName", "drawerName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/genericComponent", "genericComponent");
digester.addObjectCreate("schemaInfo/components/schemaComponent/parameters/parameter", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/paramClassName", "paramClassName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/generic", "generic");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/paramType", "paramType");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/name", "name");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/value", "value");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/valueType", "valueType");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/allowedValues", "allowedValues");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/parameters/parameter/eventName", "eventName");
digester.addSetNext("schemaInfo/components/schemaComponent/parameters/parameter", "addParameterWrapper");
digester.addObjectCreate("schemaInfo/components/schemaComponent/portList/port", PortWrapper.class);
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/name", "name");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/direction", "direction");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/orientation", "orientation");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/type", "type");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/vectorAscension", "vectorAscension");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/lowerBound", "lowerBound");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/upperBound", "upperBound");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/portList/port/relations", "relations");
digester.addSetNext("schemaInfo/components/schemaComponent/portList/port", "addPortWrapper");
digester.addObjectCreate("schemaInfo/components/schemaComponent/schemaPortList/schemaPort", SchemaPortWrapper.class);
digester.addCallMethod("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/x", "setXOffset", 1);
digester.addCallParam("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/x", 0);
digester.addCallMethod("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/y", "setYOffset", 1);
digester.addCallParam("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/y", 0);
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/name", "stringName");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/mapping", "stringMapping");
digester.addBeanPropertySetter("schemaInfo/components/schemaComponent/schemaPortList/schemaPort/portIndex", "portindex");
digester.addSetNext("schemaInfo/components/schemaComponent/schemaPortList/schemaPort", "addSchemaPort");
digester.addSetNext("schemaInfo/components/schemaComponent", "addComponent");
// entity
digester.addObjectCreate("schemaInfo/entity", EntityWrapper.class);
digester.addObjectCreate("schemaInfo/entity/parameters/parameter", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/paramClassName", "paramClassName");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/generic", "generic");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/paramType", "paramType");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/name", "name");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/value", "value");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/valueType", "valueType");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/allowedValues", "allowedValues");
digester.addBeanPropertySetter("schemaInfo/entity/parameters/parameter/eventName", "eventName");
digester.addSetNext("schemaInfo/entity/parameters/parameter", "addParameterWrapper");
// digester.addObjectCreate("schemaInfo/entity/portList/port", PortWrapper.class);
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/name", "name");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/direction", "direction");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/type", "type");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/vectorAscension", "vectorAscension");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/lowerBound", "lowerBound");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/upperBound", "upperBound");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/relations", "relations");
// digester.addSetNext("schemaInfo/entity/portList/port", "addPortWrapper");
digester.addSetNext("schemaInfo/entity", "setEntityFromWrapper");
}
private void setRules_v2(Digester digester) {
// schema info
digester.addObjectCreate("schemaInfo_v2", SchemaInfo.class);
// shortcuts
digester.addObjectCreate("schemaInfo_v2/shortcuts", ShortcutTable.class);
digester.addCallMethod("schemaInfo_v2/shortcuts/s", "add", 1);
digester.addCallParam("schemaInfo_v2/shortcuts/s", 0);
digester.addSetNext("schemaInfo_v2/shortcuts", "setShortcutTable");
// wires
digester.addObjectCreate("schemaInfo_v2/wires/wire", WireWrapper.class);
digester.addObjectCreate("schemaInfo_v2/wires/wire/segs/seg", WireSegment.class);
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/segs/seg/x1", "x1");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/segs/seg/y1", "y1");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/segs/seg/x2", "x2");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/segs/seg/y2", "y2");
digester.addSetNext("schemaInfo_v2/wires/wire/segs/seg", "addWireSegment");
digester.addCallMethod("schemaInfo_v2/wires/wire/drawerName", "setDrawer", 1);
digester.addCallParam("schemaInfo_v2/wires/wire/drawerName", 0);
digester.addObjectCreate("schemaInfo_v2/wires/wire/params/par", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/cls", "paramClassName");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/gen", "generic");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/pt", "paramType");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/name", "name");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/val", "value");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/vt", "valueType");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/allowed", "allowedValues");
digester.addBeanPropertySetter("schemaInfo_v2/wires/wire/params/par/event", "eventName");
digester.addSetNext("schemaInfo_v2/wires/wire/params/par", "addParameterWrapper");
digester.addSetNext("schemaInfo_v2/wires/wire", "addWireWrapper");
// components
digester.addObjectCreate("schemaInfo_v2/components/comp", ComponentWrapper.class);
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/cls", "componentClassName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/x", "x");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/y", "y");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/wdt", "width");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/hgt", "height");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/name", "componentName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/filenm", "codeFileName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/cat", "categoryName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/drawer", "drawerName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/generic", "genericComponent");
digester.addObjectCreate("schemaInfo_v2/components/comp/params/par", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/cls", "paramClassName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/gen", "generic");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/pt", "paramType");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/name", "name");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/val", "value");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/vt", "valueType");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/allowed", "allowedValues");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/params/par/event", "eventName");
digester.addSetNext("schemaInfo_v2/components/comp/params/par", "addParameterWrapper");
digester.addObjectCreate("schemaInfo_v2/components/comp/ports/port", PortWrapper.class);
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/nm", "name");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/dir", "direction");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/or", "orientation");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/tp", "type");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/va", "vectorAscension");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/lo", "lowerBound");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/hi", "upperBound");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/ports/port/relations", "relations");
digester.addSetNext("schemaInfo_v2/components/comp/ports/port", "addPortWrapper");
digester.addObjectCreate("schemaInfo_v2/components/comp/schports/sp", SchemaPortWrapper.class);
digester.addCallMethod("schemaInfo_v2/components/comp/schports/sp/x", "setXOffset", 1);
digester.addCallParam("schemaInfo_v2/components/comp/schports/sp/x", 0);
digester.addCallMethod("schemaInfo_v2/components/comp/schports/sp/y", "setYOffset", 1);
digester.addCallParam("schemaInfo_v2/components/comp/schports/sp/y", 0);
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/schports/sp/nm", "stringName");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/schports/sp/mp", "stringMapping");
digester.addBeanPropertySetter("schemaInfo_v2/components/comp/schports/sp/p", "portindex");
digester.addSetNext("schemaInfo_v2/components/comp/schports/sp", "addSchemaPort");
digester.addSetNext("schemaInfo_v2/components/comp", "replaceDrawerAndAddComponent");
// entity
digester.addObjectCreate("schemaInfo_v2/entity", EntityWrapper.class);
digester.addObjectCreate("schemaInfo_v2/entity/params/par", ParameterWrapper.class);
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/cls", "paramClassName");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/gen", "generic");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/pt", "paramType");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/name", "name");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/val", "value");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/vt", "valueType");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/allowed", "allowedValues");
digester.addBeanPropertySetter("schemaInfo_v2/entity/params/par/event", "eventName");
digester.addSetNext("schemaInfo_v2/entity/params/par", "addParameterWrapper");
// digester.addObjectCreate("schemaInfo/entity/portList/port", PortWrapper.class);
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/nm", "name");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/dir", "direction");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/type", "type");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/va", "vectorAscension");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/lower", "lowerBound");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/upper", "upperBound");
// digester.addBeanPropertySetter("schemaInfo/entity/portList/port/relations", "relations");
// digester.addSetNext("schemaInfo/entity/portList/port", "addPortWrapper");
digester.addSetNext("schemaInfo_v2/entity", "setEntityFromWrapper");
}
public SchemaInfo deserializeSchema(Reader reader) {
Digester digester = new Digester();
digester.setValidating(false);
setRules_v1(digester);
setRules_v2(digester);
try {
return (SchemaInfo)digester.parse(reader);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}