/*******************************************************************************
 * Copyright (c) 2003, 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.favorites;

import org.apache.wsil.WSILDocument;
import org.eclipse.wst.ws.internal.explorer.plugin.ExplorerPlugin;
import org.eclipse.wst.ws.internal.parser.favorites.FavoritesRegistryTypeAbstract;


public class FavoritesRegistryTypeWSE extends FavoritesRegistryTypeAbstract
{
  private static WSILDocument wsilDoc_;
  public static final String FAVORITES_WSEXPLORER = "favorites.wsil";
  private String defaultFavorites_ = null;
  private String stateLocation_ = null;
  
  public FavoritesRegistryTypeWSE()
  {
    super();
    wsilDoc_ = null;
  }
  
  public FavoritesRegistryTypeWSE(String defaultFavorites, String stateLocation) {
	super();
	wsilDoc_ = null;
	defaultFavorites_ = defaultFavorites;
	stateLocation_ = stateLocation;
  }

  public String getReadLocation()
  {
    StringBuffer readLocation = new StringBuffer();
    readLocation.append(stateLocation_ == null ? ExplorerPlugin.getInstance().getPluginStateLocation() : stateLocation_);
    readLocation.append(FAVORITES_WSEXPLORER);
    return readLocation.toString();
  }

  public String getWriteLocation()
  {
    return getReadLocation();
  }

  protected WSILDocument getWSILDocument()
  {
    if (wsilDoc_ == null)
    {
      wsilDoc_ = loadWSILDocument(getReadLocation(), false);
      if (wsilDoc_ == null)
      {
        restoreFavoritesDefault();
        try
        {
          save();
        }
        catch (Throwable t)
        {
        }
      }
    }
    return wsilDoc_;
  }

  public void restoreFavoritesDefault()
  {
    wsilDoc_ = (new FavoritesRegistryTypeDefault(defaultFavorites_)).getWSILDocument();
  }
}
