package pikater.ontology.messages; import jade.content.Concept; import jade.util.leap.ArrayList; import jade.util.leap.Iterator; import jade.util.leap.List; import java.util.Date; import weka.core.FastVector; import weka.core.Utils; public class Attribute implements Concept { /** * */ private static final long serialVersionUID = 4335994730042008739L; public final static String NUMERIC_TYPE = "NUMERIC"; public final static String NOMINAL_TYPE = "NOMINAL"; public final static String STRING_TYPE = "STRING"; public final static String DATE_TYPE = "DATE"; public final static String RELATIONAL_TYPE = "RELATIONAL"; private String name; private String type;// nominal/numeric/string private List values; private String date_format; /** * @return the date_format */ public String getDate_format() { return date_format; } /** * @param dataFormat * the date_format to set */ public void setDate_format(String dateFormat) { date_format = dateFormat; } /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the type */ public String getType() { return type; } /** * @param type * the type to set */ public void setType(String type) { this.type = type; } /** * @return the values */ public List getValues() { return values; } /** * @param values * the values to set */ public void setValues(List values) { this.values = values; } // ======================================= public weka.core.Attribute toWekaAttribute() { if (values != null && values.size() > 0) { FastVector my_nominal_values = new FastVector(); Iterator itr = values.iterator(); while (itr.hasNext()) { String val = (String) itr.next(); my_nominal_values.addElement(val); } // co type??? return new weka.core.Attribute(name, my_nominal_values); } else { if (type.equals(DATE_TYPE)) { return new weka.core.Attribute(name, date_format); } else if (type.equals(RELATIONAL_TYPE)) { // TODO: another instance weka.core.Instances winst = null; return new weka.core.Attribute(name, winst); } else { return new weka.core.Attribute(name); } } } public void fillWekaAttribute(weka.core.Attribute wattr) { setName(wattr.name()); switch (wattr.type()) { case weka.core.Attribute.NUMERIC: setType(NUMERIC_TYPE); break; case weka.core.Attribute.NOMINAL: setType(NOMINAL_TYPE); break; case weka.core.Attribute.STRING: setType(STRING_TYPE); break; case weka.core.Attribute.DATE: setType(DATE_TYPE); setDate_format(wattr.getDateFormat()); break; case weka.core.Attribute.RELATIONAL: setType(RELATIONAL_TYPE); /* TODO: treating another table */ break; default: // TODO: error } List attr_values = new ArrayList(); for (int j = 0; j < wattr.numValues(); j++) { attr_values.add(wattr.value(j)); } setValues(attr_values); } String stringValue(double _dval) { if (values != null && values.size() > 0) { return Utils.quote((String) values.get((int) _dval)); } else if (type.equals(NUMERIC_TYPE)) { return Utils.doubleToString(_dval, 6); } else if (type.equals(DATE_TYPE)) { Date d = new Date((long) _dval); return Utils.quote(d.toString());// TODO: normalized date format // SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") } // TODO: relational return null; } /* * public void print() { // TODO Auto-generated method stub * System.out.print(name+" "+type+" "); Iterator itr = values.iterator(); * while(itr.hasNext()){ System.out.print((String)itr.next()+","); } } */ }