/*
 * DatumRangePersistenceDelegate.java
 *
 * Created on August 8, 2007, 10:43 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.autoplot.state;

import java.beans.Encoder;
import java.beans.Expression;
import java.beans.PersistenceDelegate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.autoplot.dom.BindingModel;

/**
 *
 * @author jbf
 */
public class BindingPersistenceDelegate extends PersistenceDelegate {
    
    public BindingPersistenceDelegate()  {
    }

    protected Expression instantiate(Object oldInstance, Encoder out) {        
        BindingModel field= (BindingModel)oldInstance;
        return new Expression( field, this.getClass(), "newBindingModel", new Object[] { field.toString() } );
    }
    
    public static BindingModel newBindingModel( String description ) {
        Pattern p= Pattern.compile("(.+?)\\.(.+?) +to +(.+?)\\.(.+?) +\\((.+)\\)");
        Matcher m= p.matcher(description);
        if ( m.matches() ) {
            BindingModel bm= new BindingModel( m.group(5), m.group(1), m.group(2), m.group(3), m.group(4) );
            return bm;
        } else {
            throw new IllegalArgumentException("Poorly formatted binding: "+description);
        }
    }

    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
        super.initialize(type, oldInstance, newInstance, out);
    }
}