/*
* 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.core.rule;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.List;
public class ConsequenceMetaData implements Externalizable {
private List<Statement> statements;
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject( statements );
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
statements = (List<Statement>) in.readObject();
}
public List<Statement> getStatements() {
return statements;
}
public void addStatement(Statement statement) {
if (statements == null) {
statements = new ArrayList<Statement>();
}
statements.add(statement);
}
@Override
public String toString() {
return statements != null ? statements.toString() : "";
}
public static class Statement implements Externalizable {
public enum Type { INSERT, RETRACT, MODIFY }
private Type type;
private String factClassName;
private List<Field> fields;
public Statement() { }
public Statement(Type type, Class<?> factClass) {
this.type = type;
this.factClassName = factClass.getName();
}
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject( type );
out.writeObject( factClassName );
out.writeObject( fields );
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
type = (Type) in.readObject();
factClassName = (String) in.readObject();
fields = (List<Field>) in.readObject();
}
public Type getType() {
return type;
}
public String getFactClassName() {
return factClassName;
}
public List<Field> getFields() {
return fields;
}
public void addField(Field field) {
if (fields == null) {
fields = new ArrayList<Field>();
}
fields.add(field);
}
public void addField(String name, String value) {
addField(new Field(name, value));
}
@Override
public String toString() {
return "Modifications to " + factClassName + ": " + fields;
}
}
public static class Field implements Externalizable {
private String name;
private String value;
public Field() { }
public Field(String name, String value) {
this.name = name;
this.value = value;
}
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject( name );
out.writeObject( value );
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String) in.readObject();
value = (String) in.readObject();
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public boolean isLiteral() {
return value != null && value.length() > 0 &&
( Character.isDigit(value.charAt(0)) || value.charAt(0) == '"' || "true".equals(value) || "false".equals(value) );
}
@Override
public String toString() {
return name + " = " + value;
}
}
}