blob: b3cddb90f035ed35de4e5b6d725a267bdd14e89b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.stanbol.rules.manager;
import org.apache.clerezza.commons.rdf.IRI;
import org.apache.stanbol.rules.base.api.Recipe;
import org.apache.stanbol.rules.base.api.Rule;
import org.apache.stanbol.rules.base.api.RuleAtom;
import org.apache.stanbol.rules.base.api.util.AtomList;
/**
*
* A concrete implementation of a {@link Rule}.
*
* @author anuzzolese
*
*/
public class RuleImpl implements Rule {
private IRI ruleID;
private String ruleName;
private String rule;
private AtomList head;
private AtomList body;
protected Recipe recipe;
protected String description;
public RuleImpl(IRI ruleID, String ruleName, AtomList body, AtomList head) {
this.ruleID = ruleID;
this.ruleName = ruleName;
this.head = head;
this.body = body;
}
public String getRuleName() {
return ruleName;
}
public void setRuleName(String ruleName) {
this.ruleName = ruleName;
}
public String getRule() {
return rule;
}
public void setRule(String rule) {
this.rule = rule;
}
@Override
public String prettyPrint() {
String rule = null;
String tab = " ";
if (head != null && body != null) {
boolean addAnd = false;
rule = "RULE " + ruleName + " ASSERTS THAT " + System.getProperty("line.separator");
rule += "IF" + System.getProperty("line.separator");
for (RuleAtom atom : body) {
rule += tab;
if (addAnd) {
rule += "AND ";
} else {
addAnd = true;
}
rule += atom.toString() + System.getProperty("line.separator");
}
rule += "IMPLIES" + System.getProperty("line.separator");
addAnd = false;
for (RuleAtom atom : head) {
rule += tab;
if (addAnd) {
rule += "AND ";
} else {
addAnd = true;
}
rule += atom.toString() + System.getProperty("line.separator");
}
}
return rule;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(ruleName);
stringBuilder.append("[");
boolean firstLoop = true;
// add the rule body
for (RuleAtom atom : body) {
if (!firstLoop) {
stringBuilder.append(" . ");
} else {
firstLoop = false;
}
stringBuilder.append(atom.toString());
}
// add the rule head
if (head != null) {
stringBuilder.append(" -> ");
firstLoop = true;
for (RuleAtom atom : head) {
if (!firstLoop) {
stringBuilder.append(" . ");
} else {
firstLoop = false;
}
stringBuilder.append(atom.toString());
}
}
stringBuilder.append("]");
return stringBuilder.toString();
}
@Override
public AtomList getBody() {
return body;
}
@Override
public AtomList getHead() {
return head;
}
@Override
public IRI getRuleID() {
return ruleID;
}
protected void bindToRecipe(Recipe recipe) {
this.recipe = recipe;
}
@Override
public Recipe getRecipe() {
return recipe;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
}