// Path: src/main/java/com/googlecode/rockit/exception/ILPException.java
// public class ILPException extends SolveException
// {
//     /**
//      * When the ilp is infeasible, this exception occurs.
//      */
//     private static final long serialVersionUID = -4390221337485101364L;
// 
// 
//     public ILPException()
//     {
//     }
// 
// 
//     public ILPException(String msg)
//     {
//         super(msg);
//     }
// }
// 
// Path: src/main/java/com/googlecode/rockit/exception/SolveException.java
// public class SolveException extends Exception
// {
// 
//     /**
//      * Exceptions which can occur in the Parse Phase of the application.
//      */
//     private static final long serialVersionUID = -4390221337485101364L;
// 
// 
//     public SolveException()
//     {
//     }
// 
// 
//     public SolveException(String msg)
//     {
//         super(msg);
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/rockit/javaAPI/formulas/FormulaSoft.java
// public class FormulaSoft extends FormulaHard
// {
//     private VariableDouble doubleVariable;
//     private Double         weight = null;
// 
// 
//     public FormulaSoft()
//     {
//     }
// 
// 
//     public FormulaSoft(String name, HashSet<VariableType> forVariables, ArrayList<IfExpression> ifExpressions, VariableDouble doubleVariable, ArrayList<PredicateExpression> restrictions, boolean usesConjunction) throws ParseException
//     {
//         this.setForVariables(forVariables);
//         this.setName(name);
//         this.setIfExpressions(ifExpressions);
//         this.setDoubleVariable(doubleVariable);
//         this.setRestrictions(restrictions);
//         if(usesConjunction) {
//             this.setConjunction();
//         } else {
//             this.setDisjunction();
//         }
//     }
// 
// 
//     public Double getWeight()
//     {
//         return weight;
//     }
// 
// 
//     public void setDoubleVariable(VariableDouble doubleVariable)
//     {
//         this.doubleVariable = doubleVariable;
//     }
// 
// 
//     public VariableDouble getDoubleVariable()
//     {
//         return doubleVariable;
//     }
// 
// 
//     public void setWeight(Double weight)
//     {
//         this.weight = weight;
//     }
// 
// 
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder();
//         if(weight != null)
//             sb.append(this.getWeight());
//         if(doubleVariable != null)
//             sb.append(this.doubleVariable.toString()).append(":");
//         sb.append("  ");
// 
//         sb.append(super.toSuperString());
// 
//         if(this.isConjunction())
//             sb.append("(");
//         int i = 0;
//         for(PredicateExpression restriction : this.getRestrictions()) {
//             sb.append(restriction.toString());
//             if(i < (this.getRestrictions().size() - 1)) {
//                 if(this.isConjunction()) {
//                     sb.append(" n ");
//                 } else {
//                     sb.append(" v ");
//                 }
//             }
//             i++;
//         }
//         if(this.isConjunction())
//             sb.append(")");
//         /*
//          * if(this.doubleVariable!= null){
//          * sb.append(" * ");
//          * sb.append(this.doubleVariable.toString());
//          * }
//          */
//         sb.append("\n");
//         return sb.toString();
//     }
// 
// }


import com.googlecode.rockit.app.solver.pojo.Clause;
import com.googlecode.rockit.conn.ilp.ILPConnector;
import com.googlecode.rockit.exception.ILPException;
import com.googlecode.rockit.exception.SolveException;
import com.googlecode.rockit.javaAPI.formulas.FormulaSoft;
package com.googlecode.rockit.app.solver.aggregate;



public interface AggregationManager
{

    public abstract void resetAggregatedSoftFormulas();


    /**
     * Adds aggregated soft constraints.
     * 
     * These aggregated soft constraints will be included into the gurobi model,
     * when solve() is executed.
     * 
     * @param weight
     * @param variableNames
     * @param mustBePositive
     * @param conjunction
     * @param id
     * @throws ILPException
     */
    public void addClauseForAggregation(Clause clause, FormulaSoft formula);


// Path: src/main/java/com/googlecode/rockit/exception/ILPException.java
// public class ILPException extends SolveException
// {
//     /**
//      * When the ilp is infeasible, this exception occurs.
//      */
//     private static final long serialVersionUID = -4390221337485101364L;
// 
// 
//     public ILPException()
//     {
//     }
// 
// 
//     public ILPException(String msg)
//     {
//         super(msg);
//     }
// }
// 
// Path: src/main/java/com/googlecode/rockit/exception/SolveException.java
// public class SolveException extends Exception
// {
// 
//     /**
//      * Exceptions which can occur in the Parse Phase of the application.
//      */
//     private static final long serialVersionUID = -4390221337485101364L;
// 
// 
//     public SolveException()
//     {
//     }
// 
// 
//     public SolveException(String msg)
//     {
//         super(msg);
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/rockit/javaAPI/formulas/FormulaSoft.java
// public class FormulaSoft extends FormulaHard
// {
//     private VariableDouble doubleVariable;
//     private Double         weight = null;
// 
// 
//     public FormulaSoft()
//     {
//     }
// 
// 
//     public FormulaSoft(String name, HashSet<VariableType> forVariables, ArrayList<IfExpression> ifExpressions, VariableDouble doubleVariable, ArrayList<PredicateExpression> restrictions, boolean usesConjunction) throws ParseException
//     {
//         this.setForVariables(forVariables);
//         this.setName(name);
//         this.setIfExpressions(ifExpressions);
//         this.setDoubleVariable(doubleVariable);
//         this.setRestrictions(restrictions);
//         if(usesConjunction) {
//             this.setConjunction();
//         } else {
//             this.setDisjunction();
//         }
//     }
// 
// 
//     public Double getWeight()
//     {
//         return weight;
//     }
// 
// 
//     public void setDoubleVariable(VariableDouble doubleVariable)
//     {
//         this.doubleVariable = doubleVariable;
//     }
// 
// 
//     public VariableDouble getDoubleVariable()
//     {
//         return doubleVariable;
//     }
// 
// 
//     public void setWeight(Double weight)
//     {
//         this.weight = weight;
//     }
// 
// 
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder();
//         if(weight != null)
//             sb.append(this.getWeight());
//         if(doubleVariable != null)
//             sb.append(this.doubleVariable.toString()).append(":");
//         sb.append("  ");
// 
//         sb.append(super.toSuperString());
// 
//         if(this.isConjunction())
//             sb.append("(");
//         int i = 0;
//         for(PredicateExpression restriction : this.getRestrictions()) {
//             sb.append(restriction.toString());
//             if(i < (this.getRestrictions().size() - 1)) {
//                 if(this.isConjunction()) {
//                     sb.append(" n ");
//                 } else {
//                     sb.append(" v ");
//                 }
//             }
//             i++;
//         }
//         if(this.isConjunction())
//             sb.append(")");
//         /*
//          * if(this.doubleVariable!= null){
//          * sb.append(" * ");
//          * sb.append(this.doubleVariable.toString());
//          * }
//          */
//         sb.append("\n");
//         return sb.toString();
//     }
// 
// }


// Path: src/main/java/com/googlecode/rockit/app/solver/aggregate/AggregationManager.java
import com.googlecode.rockit.app.solver.pojo.Clause;
import com.googlecode.rockit.conn.ilp.ILPConnector;
import com.googlecode.rockit.exception.ILPException;
import com.googlecode.rockit.exception.SolveException;
import com.googlecode.rockit.javaAPI.formulas.FormulaSoft;

package com.googlecode.rockit.app.solver.aggregate;



public interface AggregationManager
{

    public abstract void resetAggregatedSoftFormulas();


    /**
     * Adds aggregated soft constraints.
     * 
     * These aggregated soft constraints will be included into the gurobi model,
     * when solve() is executed.
     * 
     * @param weight
     * @param variableNames
     * @param mustBePositive
     * @param conjunction
     * @param id
     * @throws ILPException
     */
    public void addClauseForAggregation(Clause clause, FormulaSoft formula);


    public void addConstraintsToILP(ILPConnector connector) throws ILPException, SolveException;