blob: 0a8fcc9826101edd99a3b692a1a7724a2663a253 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 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.favorites.datamodel;
import java.io.File;
import java.util.Enumeration;
import java.util.Hashtable;
import org.apache.wsil.Link;
import org.eclipse.wst.ws.internal.datamodel.Model;
import org.eclipse.wst.ws.internal.explorer.platform.constants.ModelConstants;
import org.eclipse.wst.ws.internal.explorer.platform.datamodel.TreeElement;
import org.eclipse.wst.ws.internal.explorer.platform.favorites.constants.FavoritesModelConstants;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager;
import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.CategoryModel;
import org.eclipse.wst.ws.internal.explorer.platform.util.URLUtils;
/**
* The data model element that represents
* a WSIL document
*/
public class FavoritesUDDIRegistryFolderElement extends FavoritesFolderElement
{
public FavoritesUDDIRegistryFolderElement(String name, Model model, NodeManager nodeManager) {
super(name, model, nodeManager);
}
public void init(FavoritesMainElement favMainElement) {
Link[] links = favMainElement.loadUDDIRegistries();
for (int i = 0; i < links.length; i++) {
Link link = links[i];
FavoritesUDDIRegistryElement favUDDIRegsitryElement = new FavoritesUDDIRegistryElement((link.getAbstracts())[0].getText(), getModel(), link);
connect(favUDDIRegsitryElement, FavoritesModelConstants.REL_UDDI_REGISTRY_NODE, ModelConstants.REL_OWNER);
}
}
public boolean addFavorite(Hashtable table) {
String registryName = (String)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_NAME);
String inquiryAPI = (String)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_INQUIRY_API);
String publishAPI = (String)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_PUBLISH_API);
String registrationURL = (String)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_REGISTRATION_URL);
Enumeration userDefinedCategories = (Enumeration)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_CATEGORIES_ENUM);
// Save the category data first and undo if necessary.
if (userDefinedCategories != null)
{
String pluginMetadataDirectory = (String)table.get(FavoritesModelConstants.PROP_PLUGIN_METADATA_DIRECTORY);
StringBuffer directoryBuffer = new StringBuffer();
formCategoriesDirectory(directoryBuffer,pluginMetadataDirectory,registryName);
File categoriesDirectoryFile = new File(directoryBuffer.toString());
categoriesDirectoryFile.mkdirs();
StringBuffer categoryFileName = new StringBuffer();
while (userDefinedCategories.hasMoreElements())
{
CategoryModel categoryModel = (CategoryModel)userDefinedCategories.nextElement();
categoryFileName.setLength(0);
String encodedCategoryKey = URLUtils.encode(categoryModel.getCategoryKey());
categoryFileName.append(categoriesDirectoryFile.getAbsolutePath()).append(File.separatorChar).append(encodedCategoryKey).append(".txt");
byte rc = categoryModel.saveData(categoryFileName.toString());
if (rc != CategoryModel.OPERATION_SUCCESSFUL)
{
// Delete the category file if it exists.
File categoryFile = new File(categoryFileName.toString());
if (categoryFile.exists())
categoryFile.delete();
}
}
cleanupCategoryDirectories(categoriesDirectoryFile);
}
if (registryName == null || inquiryAPI == null || publishAPI == null)
return false;
FavoritesUDDIRegistryElement e = getFavorite(registryName);
if (e != null)
removeFavorite(e);
FavoritesMainElement favMainElement = getFavoritesMainElement();
Link link = favMainElement.addUDDIRegistry(registryName, inquiryAPI, publishAPI, registrationURL);
boolean saved = favMainElement.saveFavorites();
if (saved) {
FavoritesUDDIRegistryElement favUDDIRegsitryElement = new FavoritesUDDIRegistryElement(registryName, getModel(), link);
connect(favUDDIRegsitryElement, FavoritesModelConstants.REL_UDDI_REGISTRY_NODE, ModelConstants.REL_OWNER);
}
return saved;
}
public static final void formCategoriesDirectory(StringBuffer categoriesDirectory,String pluginMetadataDirectory,String registryName)
{
// <metadata>/uddi/<registryId>/categories
String encodedRegistryName = URLUtils.encode(registryName);
categoriesDirectory.append(pluginMetadataDirectory).append("uddi").append(File.separatorChar).append(encodedRegistryName).append(File.separatorChar).append("categories");
}
private final void clearRegistryMetadata(String pluginMetadataDirectory,String registryName)
{
StringBuffer categoriesDirectory = new StringBuffer();
formCategoriesDirectory(categoriesDirectory,pluginMetadataDirectory,registryName);
File categoriesDirectoryFile = new File(categoriesDirectory.toString());
File[] categoryFiles = categoriesDirectoryFile.listFiles();
if (categoryFiles != null)
{
for (int i=0;i<categoryFiles.length;i++)
categoryFiles[i].delete();
}
cleanupCategoryDirectories(categoriesDirectoryFile);
}
private final void cleanupCategoryDirectories(File categoriesDirectoryFile)
{
// Delete the categories subdirectory if it is empty.
String[] fileList;
fileList = categoriesDirectoryFile.list();
if (fileList == null || fileList.length == 0)
categoriesDirectoryFile.delete();
// Delete the <registryId> subdirectory if it is empty.
File registryIdDirectoryFile = categoriesDirectoryFile.getParentFile();
fileList = registryIdDirectoryFile.list();
if (fileList == null || fileList.length == 0)
registryIdDirectoryFile.delete();
// Delete the uddi subdirectory if it is empty.
File uddiDirectoryFile = registryIdDirectoryFile.getParentFile();
fileList = uddiDirectoryFile.list();
if (fileList == null || fileList.length == 0)
uddiDirectoryFile.delete();
}
public boolean favoriteExists(Hashtable table) {
String registryName = (String)table.get(FavoritesModelConstants.PROP_UDDI_REGISTRY_NAME);
if (registryName == null)
return false;
return (getFavorite(registryName) != null);
}
public boolean removeFavoriteByNodeID(int nodeID,String pluginMetadataDirectory) {
Node selectedNode = nodeManager_.getNode(nodeID);
TreeElement selectedElement = selectedNode.getTreeElement();
FavoritesMainElement favMainElement = getFavoritesMainElement();
if (selectedElement instanceof FavoritesUDDIRegistryElement)
{
clearRegistryMetadata(pluginMetadataDirectory,selectedElement.getName());
boolean rc = removeFavorite((FavoritesUDDIRegistryElement)selectedElement);
rc = rc && favMainElement.saveFavorites();
return rc;
}
else
return false;
}
private boolean removeFavorite(FavoritesUDDIRegistryElement element) {
Link link = ((FavoritesUDDIRegistryElement)element).getLink();
FavoritesMainElement favMainElement = getFavoritesMainElement();
if (favMainElement.removeLink(link)) {
element.disconnectAll();
return true;
}
else
return false;
}
public boolean removeAllFavorites(String pluginMetadataDirectory) {
FavoritesMainElement favMainElement = getFavoritesMainElement();
Enumeration e = getAllFavorites();
while(e.hasMoreElements()) {
FavoritesUDDIRegistryElement favUDDIRegistryElement = (FavoritesUDDIRegistryElement)e.nextElement();
clearRegistryMetadata(pluginMetadataDirectory,favUDDIRegistryElement.getName());
Link link = favUDDIRegistryElement.getLink();
favMainElement.removeLink(link);
}
disconnectRel(FavoritesModelConstants.REL_UDDI_REGISTRY_NODE);
return favMainElement.saveFavorites();
}
public Enumeration getAllFavorites() {
return getElements(FavoritesModelConstants.REL_UDDI_REGISTRY_NODE);
}
private FavoritesUDDIRegistryElement getFavorite(String registryName) {
Enumeration e = getAllFavorites();
while (e.hasMoreElements()) {
FavoritesUDDIRegistryElement regElement = (FavoritesUDDIRegistryElement)e.nextElement();
if (registryName.equals(regElement.getName()))
return regElement;
}
return null;
}
}