/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.drools.compiler.kproject.models;
import org.drools.core.util.AbstractXStreamConverter;
import org.kie.api.builder.model.ListenerModel;
import org.kie.api.builder.model.QualifierModel;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class ListenerModelImpl implements ListenerModel {
private KieSessionModelImpl kSession;
private String type;
private ListenerModel.Kind kind;
private QualifierModel qualifier;
public ListenerModelImpl() { }
public ListenerModelImpl(KieSessionModelImpl kSession, String type, ListenerModel.Kind kind) {
this.kSession = kSession;
this.type = type;
this.kind = kind;
}
public String getType() {
return type;
}
private void setType(String type) {
this.type = type;
}
public ListenerModel.Kind getKind() {
return kind;
}
void setKind(ListenerModel.Kind kind) {
this.kind = kind;
}
public QualifierModel getQualifierModel() {
return qualifier;
}
private void setQualifierModel(QualifierModel qualifier) {
this.qualifier = qualifier;
}
public QualifierModel newQualifierModel(String type) {
QualifierModelImpl qualifier = new QualifierModelImpl(type);
this.qualifier = qualifier;
return qualifier;
}
public KieSessionModelImpl getKSession() {
return kSession;
}
public void setKSession(KieSessionModelImpl kSession) {
this.kSession = kSession;
}
public static class ListenerConverter extends AbstractXStreamConverter {
public ListenerConverter() {
super(ListenerModelImpl.class);
}
public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
ListenerModelImpl listener = (ListenerModelImpl) value;
writer.addAttribute("type", listener.getType());
/* TODO make qualifiers working properly before readd them to the xml
QualifierModelImpl qualifier = (QualifierModelImpl)listener.getQualifierModel();
if (qualifier != null) {
if (qualifier.isSimple()) {
writer.addAttribute("qualifier", qualifier.getType());
} else {
writeObject(writer, context, "qualifier", qualifier);
}
}
*/
}
public Object unmarshal(HierarchicalStreamReader reader, final UnmarshallingContext context) {
final ListenerModelImpl listener = new ListenerModelImpl();
listener.setType(reader.getAttribute("type"));
/* TODO make qualifiers working properly before readd them to the xml
String qualifierType = reader.getAttribute("qualifier");
if (qualifierType != null) {
listener.newQualifierModel(qualifierType);
}
readNodes( reader, new AbstractXStreamConverter.NodeReader() {
public void onNode(HierarchicalStreamReader reader,
String name,
String value) {
if ( "qualifier".equals( name ) ) {
QualifierModelImpl qualifier = readObject(reader, context, QualifierModelImpl.class);
listener.setQualifierModel(qualifier);
}
}
} );
*/
return listener;
}
}
}