/*******************************************************************************
 * Copyright (c) 2001, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective;

import org.eclipse.wst.ws.internal.explorer.platform.constants.*;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.*;

import java.util.*;

public class SubQueryTransferTarget
{
  private int nodeId_;
  private int toolId_;
  private int viewId_;
  private int viewToolId_;
  private String subQueryKey_;
  private NodeManager nodeManager_;
  Hashtable parentQueryData_;

  public SubQueryTransferTarget(Node node,String subQueryKey,Hashtable parentQueryData)
  {
    nodeId_ = node.getNodeId();
    toolId_ = node.getToolManager().getSelectedToolId();
    viewId_ = node.getViewId();
    viewToolId_ = node.getViewToolId();
    subQueryKey_ = subQueryKey;
    nodeManager_ = node.getNodeManager();
    parentQueryData_ = parentQueryData;
  }

  public final int getNodeId()
  {
    return nodeId_;
  }

  public final int getToolId()
  {
    return toolId_;
  }

  public final int getViewId()
  {
    return viewId_;
  }

  public final int getViewToolId()
  {
    return viewToolId_;
  }

  public final String getSubQueryKey()
  {
    return subQueryKey_;
  }

  public final FormTool getTargetFormTool()
  {
    Node node = nodeManager_.getNode(nodeId_);
    if (node == null)
      return null;

    Tool tool = node.getToolManager().getTool(toolId_);

    if (viewId_ != ActionInputs.VIEWID_DEFAULT)
    {
      ViewTool viewTool = (ViewTool)tool;
      ToolManager viewToolManager = viewTool.getToolManager(viewId_);
      if (viewToolManager != null)
        tool = viewToolManager.getTool(viewToolId_);
      else
        tool = null;
    }
    return (FormTool)tool;
  }
  
  public final Hashtable getParentQueryData()
  {
    return parentQueryData_;
  }
}
