Package pl.balon.gwt.diagrams.client.connection

Source Code of pl.balon.gwt.diagrams.client.connection.AbstractConnection

/*
* Copyright 2007 Michał Baliński
*
* Licensed 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 pl.balon.gwt.diagrams.client.connection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import pl.balon.gwt.diagrams.client.connection.calculator.ConnectionDataCalculator;
import pl.balon.gwt.diagrams.client.connection.data.ConnectionData;
import pl.balon.gwt.diagrams.client.connector.Connector;

import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Widget;

/**
* Base widget class for connections.
*
* @author Michał Baliński (michal.balinski@gmail.com)
*/
public abstract class AbstractConnection extends Widget implements Connection {

  /**
   * List of connectors involved in this connection.
   */
  private final List/*<Connector>*/ connected = new ArrayList();
 
  /**
   * Component responsible for connection computation.
   */
  private ConnectionDataCalculator calculator;
 
  /**
   * Constructs connection which connects list of connectors.
   *
   * @param toConnect Connectors to connect
   */
  public AbstractConnection(List toConnect) {
    connected.addAll(toConnect);
    setCalculator(createCalculator());
    for (Iterator i = connected.iterator(); i.hasNext();) {
      Connector c = (Connector) i.next();
      c.connect(this);
    }
  }
 
  /**
   * Constructs connection which connects list of connectors.
   *
   * @param toConnect Connectors to connect
   */
  public AbstractConnection(Connector toConnect[]) {
    this(Arrays.asList(toConnect));
  }
 
  /**
   * @see pl.balon.gwt.diagrams.client.connection.Connection#remove()
   */
  public void remove(){
    for (ListIterator i = connected.listIterator(); i.hasNext();) {
      Connector c = (Connector) i.next();
      i.remove();
      c.disconnect(this);
    }
    removeFromParent();
  }

  /**
   * @see pl.balon.gwt.diagrams.client.connection.Connection#disconnect(pl.balon.gwt.diagrams.client.connector.Connector)
   */
  public void disconnect(Connector c){
    int index = connected.indexOf(c);
    if( index > -1 ){
      connected.remove(c);
      c.disconnect(this);
    }
  }
 
  /**
   * @see pl.balon.gwt.diagrams.client.connection.Connection#update()
   */
  public void update(){
    update(computeConnectionData());
  }
 
  /**
   * Delegates connection computation to ConnectionDataCalculator
   *
   * @return connection data
   */
  private ConnectionData computeConnectionData() {
    return calculator.calculateConnectionData(connected);
  }
 
  /**
   * Redraws connection base on connection data
   *
   * @param data connection data
   */
  protected abstract void update(ConnectionData data);

  /**
   * @see pl.balon.gwt.diagrams.client.connection.Connection#appendTo(com.google.gwt.user.client.ui.AbsolutePanel)
   */
  public void appendTo(AbsolutePanel panel) {
    panel.add(this);
    update();
  }
 
  /**
   * @return new connection data calculator
   */
  protected abstract ConnectionDataCalculator createCalculator();

  /**
   * @return calculator
   */
  public ConnectionDataCalculator getCalculator() {
    return calculator;
  }

  /**
   * @param calculator
   */
  public void setCalculator(ConnectionDataCalculator calculator) {
    this.calculator = calculator;
  }
 
}
TOP

Related Classes of pl.balon.gwt.diagrams.client.connection.AbstractConnection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.