@Override public LocalExtensionFile getFile() { return getLocalExtension().getFile(); } }
public void saveDescriptor(LocalExtension extension, FileOutputStream fos) throws ParserConfigurationException, TransformerException, IOException { DocumentBuilder documentBuilder = this.documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.newDocument(); Element extensionElement = document.createElement("extension"); document.appendChild(extensionElement); addElement(document, extensionElement, "id", extension.getId().getId()); addElement(document, extensionElement, "version", extension.getId().getVersion()); addElement(document, extensionElement, "type", extension.getType()); addElement(document, extensionElement, "dependency", String.valueOf(extension.isDependency())); addElement(document, extensionElement, "installed", String.valueOf(extension.isInstalled())); addElement(document, extensionElement, "description", extension.getDescription()); addElement(document, extensionElement, "author", extension.getAuthor()); addElement(document, extensionElement, "website", extension.getWebSite()); addDependencies(document, extensionElement, extension); addNamespaces(document, extensionElement, extension); TransformerFactory transfac = TransformerFactory.newInstance(); Transformer trans = transfac.newTransformer(); trans.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(document); Result result = new StreamResult(fos); trans.transform(source, result); }
private void addLocalExtensionBackwardDependencies(LocalExtension localExtension, String namespace) { for (ExtensionDependency dependency : localExtension.getDependencies()) { Map<String, Set<LocalExtension>> namespaceBackwardDependencies = this.backwardDependenciesMap.get(dependency.getId()); if (namespaceBackwardDependencies == null) { namespaceBackwardDependencies = new HashMap<String, Set<LocalExtension>>(); this.backwardDependenciesMap.put(dependency.getId(), namespaceBackwardDependencies); } Set<LocalExtension> backwardDependencies = namespaceBackwardDependencies.get(namespace); if (backwardDependencies == null) { backwardDependencies = new HashSet<LocalExtension>(); namespaceBackwardDependencies.put(namespace, backwardDependencies); } backwardDependencies.add(localExtension); } }
private void removeFromBackwardDependencies(LocalExtension localExtension) { Collection<String> namespaces = localExtension.getNamespaces(); if (namespaces == null) { this.backwardDependenciesMap.remove(localExtension.getId().getId()); } else { Map<String, Set<LocalExtension>> namespaceBackwardDependencies = this.backwardDependenciesMap.get(localExtension.getId().getId()); for (String namespace : namespaces) { namespaceBackwardDependencies.remove(namespace); } } }
private void getInstalledLocalExtension(LocalExtension localExtension) { getInstalledLocalExtension(localExtension.getId().getId(), localExtension); for (ExtensionId feature : localExtension.getExtensionFeatures()) { getInstalledLocalExtension(feature.getId(), localExtension); } }
private void validateExtension(LocalExtension localExtension, Map<String, Set<String>> validatedExtension, String namespace) { Set<String> extensions = validatedExtension.get(namespace); if (extensions == null) { extensions = new HashSet<String>(); validatedExtension.put(namespace, extensions); } if (!extensions.contains(localExtension.getId().getId())) { validateExtension(localExtension, extensions, namespace); } }
public LocalExtension installExtension(Extension extension, boolean dependency, String namespace) throws InstallException { LocalExtension localExtension = getInstalledExtension(extension.getId().getId(), namespace); if (localExtension == null || !extension.getId().getVersion().equals(localExtension.getId().getVersion()) || (localExtension.getNamespaces() != null && !localExtension.getNamespaces().contains(namespace))) { localExtension = createExtension(extension, dependency); try { extension.download(localExtension.getFile()); saveDescriptor(localExtension); addLocalExtension(localExtension, namespace); } catch (Exception e) { // TODO: clean throw new InstallException("Failed to download extension [" + extension + "]", e); } } return localExtension; }
private void validateExtension(LocalExtension localExtension, Set<String> validatedExtensions, String namespace) if (!localExtension.isInstalled(namespace) || this.coreExtensionRepository.exists(localExtension.getId().getId())) { for (ExtensionDependency dependency : localExtension.getDependencies()) { boolean enabled = false; if (dependencyExtension.isInstalled(namespace)) { enabled = true; break; validatedExtensions.add(localExtension.getId().getId());
Map<String, ExtensionDependency> managedDependencies) throws InvalidExtensionException DefaultInstalledExtension installedExtension = this.extensions.get(localExtension.getId()); if (installedExtension != null && installedExtension.isValidated(namespace)) { if (this.coreExtensionRepository.exists(localExtension.getId().getId())) { throw new InvalidExtensionException( String.format("Extension [%s] already exists as a core extension", localExtension)); for (ExtensionDependency dependency : localExtension.getDependencies()) { try {
? previousExtension.isDependency() : dependency, namespace); this.observationManager.notify(new ExtensionUpgraded(localExtension.getId()), localExtension, previousExtension); } else { this.extensionHandlerManager.install(localExtension, namespace); this.observationManager.notify(new ExtensionInstalled(localExtension.getId()), localExtension, previousExtension);
private ExtensionHandler getExtensionHandler(LocalExtension localExtension) throws ComponentLookupException { // Load extension return this.componentManager.lookup(ExtensionHandler.class, localExtension.getType().toString().toLowerCase()); }
private void addNamespaces(Document document, Element parentElement, LocalExtension extension) { if (extension.getNamespaces() != null) { Element wikisElement = document.createElement("namespaces"); parentElement.appendChild(wikisElement); for (String namespace : extension.getNamespaces()) { addElement(document, wikisElement, "namespace", namespace); } } } }
private void saveDescriptor(LocalExtension extension) throws ParserConfigurationException, TransformerException, IOException { File file = getDescriptorFile(extension.getId()); FileOutputStream fos = new FileOutputStream(file); try { this.extensionSerializer.saveDescriptor(extension, fos); } finally { fos.close(); } }
if (installedRepository.getInstalledExtension(localExtension.getId().getId(), namespace) == null) { for (ExtensionId feature : localExtension.getExtensionFeatures()) { if (installedRepository.getInstalledExtension(feature.getId(), namespace) != null) {
public Map<String, Collection<LocalExtension>> getBackwardDependencies(ExtensionId extensionId) throws ResolveException { Map<String, Collection<LocalExtension>> result; LocalExtension localExtension = (LocalExtension) resolve(extensionId); Collection<String> namespaces = localExtension.getNamespaces(); Map<String, Set<LocalExtension>> backwardDependencies = this.backwardDependenciesMap.get(localExtension.getId().getId()); if (backwardDependencies != null) { result = new HashMap<String, Collection<LocalExtension>>(); for (Map.Entry<String, Set<LocalExtension>> entry : backwardDependencies.entrySet()) { if (namespaces == null || namespaces.contains(entry.getKey())) { result.put(entry.getKey(), Collections.unmodifiableCollection(entry.getValue())); } } } else { result = Collections.emptyMap(); } return result; } }
/** * Get the handler corresponding to the provided extension. * * @param localExtension the extension to handler * @return the handler * @throws ComponentLookupException failed to find a proper handler for the provided extension */ private ExtensionHandler getExtensionHandler(LocalExtension localExtension) throws ComponentLookupException { return this.componentManager.getInstance(ExtensionHandler.class, localExtension.getType().toLowerCase()); }
private void validateExtension(LocalExtension localExtension, Map<String, Set<String>> validatedExtension) { if (localExtension.getNamespaces() == null) { validateExtension(localExtension, validatedExtension, null); } else { for (String namespace : localExtension.getNamespaces()) { validateExtension(localExtension, validatedExtension, namespace); } } }
private void addLocalExtension(LocalExtension localExtension) { // extensions this.extensions.put(localExtension.getId(), localExtension); // versions List<LocalExtension> extensionsVersions = this.extensionsVersions.get(localExtension.getId().getId()); if (extensionsVersions == null) { extensionsVersions = new ArrayList<LocalExtension>(); this.extensionsVersions.put(localExtension.getId().getId(), extensionsVersions); extensionsVersions.add(localExtension); } else { int index = 0; while (index < extensionsVersions.size() && versionManager.compareVersions(localExtension.getId().getVersion(), extensionsVersions.get(index) .getId().getVersion()) > 0) { ++index; } extensionsVersions.add(index, localExtension); } }
public void uninstallExtension(LocalExtension localExtension, String namespace) throws UninstallException if (namespace != null && localExtension.getNamespaces() != null && !localExtension.getNamespaces().contains(namespace)) { throw new UninstallException("[" + namespace + "]: extension is not installed on wiki [" + namespace + "]"); if (namespace != null) { for (LocalExtension backardDependency : this.localExtensionRepository.getBackwardDependencies( localExtension.getId().getId(), namespace)) { uninstallExtension(backardDependency, namespace); .getBackwardDependencies(localExtension.getId()).entrySet()) { String dependenciesNamespace = entry.getKey(); for (LocalExtension backardDependency : entry.getValue()) { if (namespace == null || localExtension.getNamespaces().size() == 1) { this.localExtensionRepository.uninstallExtension(localExtension, namespace); this.observationManager.notify(new ExtensionUninstalled(localExtension.getId()), localExtension, null);
private static URL getExtensionURL(LocalExtension localExtension) throws MalformedURLException { return new File(localExtension.getFile().getAbsolutePath()).toURI().toURL(); }