diff options
Diffstat (limited to 'bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUDDIRegistryFolderElement.java')
-rw-r--r-- | bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUDDIRegistryFolderElement.java | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUDDIRegistryFolderElement.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUDDIRegistryFolderElement.java new file mode 100644 index 000000000..bae3db071 --- /dev/null +++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUDDIRegistryFolderElement.java @@ -0,0 +1,193 @@ +/******************************************************************************* + * 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.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; + } +} |