/* * Created on Dec 14, 2004 */ package fr.lifl.stc.stan.samples.flow; import java.io.PrintStream; import fr.lifl.stc.stan.analyser.GlobalAnalyser; import fr.lifl.stc.stan.link.Link; import fr.lifl.stc.stan.link.TableLink; import fr.lifl.stc.stan.signature.PartialSignatureData; import java.util.regex.*; /** * @author yann * @author dorina */ public class FlowPartialSignatureData implements PartialSignatureData { static final long serialVersionUID = 0; private TableLink s; /** * */ public FlowPartialSignatureData(TableLink s) { setData(s); } public TableLink getData() { return s; } public void setData(TableLink s) { this.s = s; } private int tokenToIndex(String tok) { try { int i = new Integer(tok).intValue(); if(i<0 || i>=s.getSizeL()) { System.err.println("LinkPartialSignatureData.tokenToIndex() : invalid index"); return 0; } return i; } catch (NumberFormatException e) { System.err.println("LinkPartialSignatureData.tokenToIndex() : not a number \"" + tok + "\""); return 0; } } private int tokenToInt(String tok) { try { int i = new Integer(tok).intValue(); /* if(i<0) { System.err.println("LinkPartialSignatureData.tokenToInt() : invalid index"); return 0; }*/ return i; } catch (NumberFormatException e) { System.err.println("LinkPartialSignatureData.tokenToInt() : not a number \"" + tok + "\""); return 0; } } //FIXME public void setData(String txt) { if (txt.equals("")) return; Matcher m = Pattern.compile("(\\d+)>(\\d+):(-?\\d+),").matcher(txt); if (! m.find()) { System.err.println("Bad argument number in \"" + txt + "\""); return; } do { s.set(tokenToIndex(m.group(1)), tokenToIndex(m.group(2)), GlobalAnalyser.linkFactory.createLink((byte)tokenToInt(m.group(3)))); } while (m.find()); //String[] tokens = txt.split("\\s(\\d+)>(\\d+):(\\d+),"); /* String[] tokens = txt.split("(\\d+)>(\\d+):(-?\\d+),"); for(int i = 0; i < tokens.length; i++) { System.out.print(tokens[i]+" "); } if(tokens.length == 0 || (tokens.length % 3) != 0) { System.err.println("Bad argument number in \"" + txt + "\""); return; } for(int i = 0; i < tokens.length; i+=3) { s.set(tokenToIndex(tokens[i]), tokenToIndex(tokens[i+1]), GlobalAnalyser.linkFactory.createLink((byte)tokenToInt(tokens[i+2]))); //s[tokenToIndex(tokens[i])][tokenToIndex(tokens[i+1])] = true; } */ } public byte[] getDataAsBytes() { return s.toBytes(null); } public void display(PrintStream out) { for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) out.println("" + i + ">>" + j + " : "+l); } } public String toString() { String o = ""; for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) o +="" + i + ">>" + j + " : "+l.toString()+"\t"; } return o; } public String toHTMLString() { String o = ""; o += ""; for(int i = 4; i < s.getSizeL(); i++) { o += ""; } o+=""; for(int i = 0; i < s.getSizeL(); i++) { o += ""; switch(i) { case 0: o += ""; break; case 1: o += ""; break; case 2: o += ""; break; case 3: o += ""; break; default: o += ""; break; } for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) o += ""; //o +="" + i + ">>" + j + " : "+l+"\t"; else o += ""; } o += ""; } o+="
 RESFP_"+(i-4)+"
RESFP_"+(i-4)+""+l+" 
"; return o; } public boolean equals(Object o) { if(o == null || !(o instanceof FlowPartialSignatureData)) return false; TableLink d = ((FlowPartialSignatureData)o).s; if (s.getSizeL() != d.getSizeL()) return false; if (s.getSizeC() != d.getSizeC()) return false; for (int i = 0; i < s.getSizeL(); i++) { for(int j = 0; j < s.getSizeC(); j++){ if(!Link.equals(s.get(i,j), d.get(i, j))) return false; } /* Link[] t1 = d[i]; Link[] t2 = s[i]; if (t1.length != t2.length) return false; for (int j = 0; j < t1.length; j++) if (!t1[j].equals(t2[j])) return false; */ } return true; } public Object clone() throws CloneNotSupportedException { FlowPartialSignatureData d = (FlowPartialSignatureData)super.clone(); d.s = (TableLink)s.clone(); /* int dim = (s.length > 0) ? s[0].length : 0; d.s = new Link[s.length][dim]; for(int i = 0; i < s.length; i++) { for(int j = 0; j < s[i].length; j++) d.s[i][j] = s[i][j].clone1(); //System.arraycopy(s[i],0,d.s[i],0,s[i].length); } */ return d; } public boolean compatibleWith(FlowPartialSignatureData d) { // this.dep => d.dep if(d == null || !(d instanceof FlowPartialSignatureData)) return false; for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) if(! Link.compatibleWith( s.get(i,j), d.s.get(i,j))) return false; return true; } public void makeAccept(FlowPartialSignatureData d) { // d.dep => this.dep for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) s.set(i,j, Link.makeAccept(s.get(i,j), d.s.get(i,j))); //s[i][j].makeAccept(d.s[i][j]); // s[i][j]=true; } }