/*******************************************************************************
 * Copyright (c) 2001, 2006 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.xsd.editor.internal.design.editparts.model;

import org.eclipse.gef.commands.Command;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.xsd.adt.facade.IADTObjectListener;
import org.eclipse.wst.xsd.adt.facade.IComplexType;
import org.eclipse.wst.xsd.adt.facade.IField;
import org.eclipse.wst.xsd.adt.facade.IModel;
import org.eclipse.wst.xsd.adt.facade.IType;
import org.eclipse.wst.xsd.editor.XSDEditorPlugin;

/**
 * Dummy class to add space to field list
 *
 */
public class SpaceFiller implements IField
{
  String kind;
  public SpaceFiller(String kind)
  {
    super();
    this.kind = kind;
  }

  public Image getImage()
  {
    if (kind.equals("attribute"))
    {
      return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif");
    }
    else
    {
      return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif");
    }
  }
  
  public String getKind()
  {
    return kind;
  }
  
  public void setKind(String kind)
  {
    this.kind = kind;
  }
  
  public boolean isGlobal()
  {
    return false;
  }

  public IComplexType getContainerType()
  {
    return null;
  }

  public String getName()
  {
    // TODO Auto-generated method stub
    return null;
  }

  public String getTypeName()
  {
    // TODO Auto-generated method stub
    return null;
  }

  public String getTypeNameQualifier()
  {
    // TODO Auto-generated method stub
    return null;
  }

  public IType getType()
  {
    // TODO Auto-generated method stub
    return null;
  }

  public int getMinOccurs()
  {
    // TODO Auto-generated method stub
    return 0;
  }

  public int getMaxOccurs()
  {
    // TODO Auto-generated method stub
    return 0;
  }

  public Command getUpdateMinOccursCommand(int minOccurs)
  {
    // TODO Auto-generated method stub
    return null;
  }

  public Command getUpdateMaxOccursCommand(int maxOccurs)
  {
    // TODO Auto-generated method stub
    return null;
  }

  public Command getUpdateTypeNameCommand(String typeName, String quailifier)
  {
    // TODO Auto-generated method stub
    return null;
  }

  public Command getUpdateNameCommand(String name)
  {
    // TODO Auto-generated method stub
    return null;
  }

  public Command getDeleteCommand()
  {
    // TODO Auto-generated method stub
    return null;
  }

  public void registerListener(IADTObjectListener listener)
  {
    // TODO Auto-generated method stub
    
  }

  public void unregisterListener(IADTObjectListener listener)
  {
    // TODO Auto-generated method stub
    
  }
  
  public boolean isReadOnly()
  {
    return true;
  }

  public IModel getModel()
  {
    // TODO Auto-generated method stub
    return null;
  }
}


