Search in sources :

Example 1 with RegisteredResource

use of org.apache.sling.installer.api.tasks.RegisteredResource in project sling by apache.

the class OsgiInstallerImpl method getInstallationState.

/**
     * @see org.apache.sling.installer.api.info.InfoProvider#getInstallationState()
     */
@Override
public InstallationState getInstallationState() {
    synchronized (this.resourcesLock) {
        final InstallationState state = new InstallationState() {

            private final List<ResourceGroup> activeResources = new ArrayList<>();

            private final List<ResourceGroup> installedResources = new ArrayList<>();

            private final List<RegisteredResource> untransformedResources = new ArrayList<>();

            @Override
            public List<ResourceGroup> getActiveResources() {
                return activeResources;
            }

            @Override
            public List<ResourceGroup> getInstalledResources() {
                return installedResources;
            }

            @Override
            public List<RegisteredResource> getUntransformedResources() {
                return untransformedResources;
            }

            @Override
            public String toString() {
                return "InstallationState[active resources: " + this.activeResources + ", installed resources: " + this.installedResources + ", untransformed resources: " + this.untransformedResources + "]";
            }
        };
        for (final String entityId : this.persistentList.getEntityIds()) {
            if (!this.persistentList.isSpecialEntityId(entityId)) {
                final EntityResourceList group = this.persistentList.getEntityResourceList(entityId);
                final String alias = group.getAlias();
                final List<Resource> resources = new ArrayList<>();
                boolean first = true;
                boolean isActive = false;
                for (final TaskResource tr : group.getResources()) {
                    final ResourceState resourceState = tr.getState();
                    if (first) {
                        if (resourceState == ResourceState.INSTALL || resourceState == ResourceState.UNINSTALL) {
                            isActive = true;
                        }
                        first = false;
                    }
                    resources.add(new Resource() {

                        @Override
                        public String getScheme() {
                            return tr.getScheme();
                        }

                        @Override
                        public String getURL() {
                            return tr.getURL();
                        }

                        @Override
                        public String getType() {
                            return tr.getType();
                        }

                        @Override
                        public InputStream getInputStream() throws IOException {
                            return tr.getInputStream();
                        }

                        @Override
                        public Dictionary<String, Object> getDictionary() {
                            return tr.getDictionary();
                        }

                        @Override
                        public String getDigest() {
                            return tr.getDigest();
                        }

                        @Override
                        public int getPriority() {
                            return tr.getPriority();
                        }

                        @Override
                        public String getEntityId() {
                            return tr.getEntityId();
                        }

                        @Override
                        public ResourceState getState() {
                            return resourceState;
                        }

                        @Override
                        public Version getVersion() {
                            return tr.getVersion();
                        }

                        @Override
                        public long getLastChange() {
                            return ((RegisteredResourceImpl) tr).getLastChange();
                        }

                        @Override
                        public Object getAttribute(final String key) {
                            return tr.getAttribute(key);
                        }

                        @Override
                        @CheckForNull
                        public String getError() {
                            return tr.getError();
                        }

                        @Override
                        public String toString() {
                            return "resource[entityId=" + getEntityId() + ", scheme=" + getScheme() + ", url=" + getURL() + ", type=" + getType() + ", error=" + getError() + ", state=" + getState() + ", version=" + getVersion() + ", lastChange=" + getLastChange() + ", priority=" + getPriority() + ", digest=" + getDigest() + "]";
                        }
                    });
                }
                final ResourceGroup rg = new ResourceGroup() {

                    @Override
                    public List<Resource> getResources() {
                        return resources;
                    }

                    @Override
                    public String getAlias() {
                        return alias;
                    }

                    @Override
                    public String toString() {
                        return "group[" + resources + "]";
                    }
                };
                if (isActive) {
                    state.getActiveResources().add(rg);
                } else {
                    state.getInstalledResources().add(rg);
                }
            }
        }
        Collections.sort(state.getActiveResources(), COMPARATOR);
        Collections.sort(state.getInstalledResources(), COMPARATOR);
        state.getUntransformedResources().addAll(this.persistentList.getUntransformedResources());
        return state;
    }
}
Also used : Dictionary(java.util.Dictionary) TaskResource(org.apache.sling.installer.api.tasks.TaskResource) InputStream(java.io.InputStream) RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) ArrayList(java.util.ArrayList) TaskResource(org.apache.sling.installer.api.tasks.TaskResource) Resource(org.apache.sling.installer.api.info.Resource) RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) InstallableResource(org.apache.sling.installer.api.InstallableResource) IOException(java.io.IOException) InstallationState(org.apache.sling.installer.api.info.InstallationState) Version(org.osgi.framework.Version) CheckForNull(javax.annotation.CheckForNull) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) ResourceState(org.apache.sling.installer.api.tasks.ResourceState) TaskResourceGroup(org.apache.sling.installer.api.tasks.TaskResourceGroup) ResourceGroup(org.apache.sling.installer.api.info.ResourceGroup)

Example 2 with RegisteredResource

use of org.apache.sling.installer.api.tasks.RegisteredResource in project sling by apache.

the class OsgiInstallerImpl method printResources.

private void printResources(String hint) {
    if (!logger.isDebugEnabled()) {
        return;
    }
    int counter = 0;
    final StringBuilder sb = new StringBuilder();
    sb.append(hint);
    sb.append(" Resources={\n");
    for (final String id : this.persistentList.getEntityIds()) {
        sb.append("- ").append(hint).append(" RegisteredResource ");
        sb.append(id);
        sb.append("\n    RegisteredResource.info=[");
        String sep = "";
        for (final RegisteredResource rr : this.persistentList.getEntityResourceList(id).listResources()) {
            sb.append(sep);
            sep = ", ";
            sb.append(rr);
            counter++;
        }
        sb.append("]\n");
    }
    sb.append("} (").append(hint).append("): ").append(counter).append(" RegisteredResources\n");
    logger.debug(sb.toString());
}
Also used : RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource)

Example 3 with RegisteredResource

use of org.apache.sling.installer.api.tasks.RegisteredResource in project sling by apache.

the class OsgiInstallerImpl method transformResources.

/**
     * Invoke the transformers on the resources.
     */
private void transformResources() {
    boolean changed = false;
    final List<ServiceReference> serviceRefs = this.transformerTracker.getSortedServiceReferences();
    if (serviceRefs.size() > 0) {
        synchronized (this.resourcesLock) {
            // Walk the list of unknown resources and invoke all transformers
            int index = 0;
            final List<RegisteredResource> unknownList = this.persistentList.getUntransformedResources();
            while (index < unknownList.size()) {
                final RegisteredResource resource = unknownList.get(index);
                for (final ServiceReference reference : serviceRefs) {
                    final Long id = (Long) reference.getProperty(Constants.SERVICE_ID);
                    // check if this transformer has already been invoked for the resource
                    final String transformers = (String) ((RegisteredResourceImpl) resource).getAttribute(ResourceTransformer.class.getName());
                    if (id == null || (transformers != null && transformers.contains(":" + id + ':'))) {
                        continue;
                    }
                    final ResourceTransformer transformer = (ResourceTransformer) this.transformerTracker.getService(reference);
                    if (transformer != null) {
                        try {
                            final TransformationResult[] result = transformer.transform(resource);
                            final String newTransformers = (transformers == null ? ":" + id + ':' : transformers + id + ':');
                            ((RegisteredResourceImpl) resource).setAttribute(ResourceTransformer.class.getName(), newTransformers);
                            if (logger.isDebugEnabled()) {
                                logger.debug("Invoked transformer {} on {} : {}", new Object[] { transformer, resource, Arrays.toString(result) });
                            }
                            if (result != null && result.length > 0) {
                                this.persistentList.transform(resource, result);
                                changed = true;
                                index--;
                                break;
                            }
                        } catch (final Throwable t) {
                            logger.error("Uncaught exception during resource transformation!", t);
                        }
                    }
                }
                index++;
            }
        }
        if (changed) {
            this.persistentList.save();
            printResources("Transformed");
        }
    }
}
Also used : RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) ServiceReference(org.osgi.framework.ServiceReference) AtomicLong(java.util.concurrent.atomic.AtomicLong) ResourceTransformer(org.apache.sling.installer.api.tasks.ResourceTransformer) TransformationResult(org.apache.sling.installer.api.tasks.TransformationResult)

Example 4 with RegisteredResource

use of org.apache.sling.installer.api.tasks.RegisteredResource in project sling by apache.

the class EntityResourceList method compact.

/**
     * Compact the resource group by removing uninstalled entries
     * @return <code>true</code> if another cycle should be started.
     */
public boolean compact() {
    synchronized (lock) {
        Collections.sort(this.resources);
        boolean startNewCycle = false;
        final List<TaskResource> toDelete = new ArrayList<TaskResource>();
        boolean first = true;
        for (final TaskResource r : resources) {
            if (r.getState() == ResourceState.UNINSTALLED || (!first && r.getState() == ResourceState.UNINSTALL)) {
                toDelete.add(r);
            }
            first = false;
        }
        if (!toDelete.isEmpty()) {
            // Avoid resources.remove(r) as the resource might have
            // changed since it was added, which causes it to compare()
            // differently and trip the TreeSet.remove() search.
            final Set<RegisteredResourceImpl> copy = new HashSet<RegisteredResourceImpl>(resources);
            for (final RegisteredResource r : toDelete) {
                copy.remove(r);
                this.cleanup(r);
                LOGGER.debug("Removing uninstalled from list: {}", r);
            }
            resources.clear();
            resources.addAll(copy);
            if (!this.isEmpty()) {
                startNewCycle = true;
            }
        }
        return startNewCycle;
    }
}
Also used : TaskResource(org.apache.sling.installer.api.tasks.TaskResource) RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet)

Example 5 with RegisteredResource

use of org.apache.sling.installer.api.tasks.RegisteredResource in project sling by apache.

the class OsgiInstallerWebConsolePlugin method printConfiguration.

/**
     * Method for the configuration printer.
     */
public void printConfiguration(final PrintWriter pw, final String mode) {
    if (!"zip".equals(mode) && !"txt".equals(mode)) {
        return;
    }
    pw.println("Apache Sling OSGi Installer");
    pw.println("===========================");
    final InstallationState state = this.installer.getInstallationState();
    pw.println("Active Resources");
    pw.println("----------------");
    String rt = null;
    for (final ResourceGroup group : state.getActiveResources()) {
        final Resource toActivate = group.getResources().get(0);
        if (!toActivate.getType().equals(rt)) {
            pw.printf("%s:%n", getType(toActivate));
            rt = toActivate.getType();
        }
        pw.printf("- %s: %s, %s, %s%n", getEntityId(toActivate, group.getAlias()), getInfo(toActivate), getURL(toActivate), toActivate.getState());
    }
    pw.println();
    pw.println("Processed Resources");
    pw.println("-------------------");
    rt = null;
    for (final ResourceGroup group : state.getInstalledResources()) {
        final Collection<Resource> resources = group.getResources();
        if (resources.size() > 0) {
            final Iterator<Resource> iter = resources.iterator();
            final Resource first = iter.next();
            if (!first.getType().equals(rt)) {
                pw.printf("%s:%n", getType(first));
                rt = first.getType();
            }
            pw.printf("* %s: %s, %s, %s%n", getEntityId(first, group.getAlias()), getInfo(first), getURL(first), getState(first));
            if (first.getAttribute(TaskResource.ATTR_INSTALL_EXCLUDED) != null) {
                pw.printf("  : %s", first.getAttribute(TaskResource.ATTR_INSTALL_EXCLUDED));
            }
            if (first.getAttribute(TaskResource.ATTR_INSTALL_INFO) != null) {
                pw.printf("  : %s", first.getAttribute(TaskResource.ATTR_INSTALL_INFO));
            }
            while (iter.hasNext()) {
                final Resource resource = iter.next();
                pw.printf("  - %s, %s, %s%n", getInfo(resource), getURL(resource), resource.getState());
            }
        }
    }
    pw.println();
    pw.println("Untransformed Resources");
    pw.println("-----------------------");
    rt = null;
    for (final RegisteredResource registeredResource : state.getUntransformedResources()) {
        if (!registeredResource.getType().equals(rt)) {
            pw.printf("%s:%n", getType(registeredResource));
            rt = registeredResource.getType();
        }
        pw.printf("- %s, %s%n", getInfo(registeredResource), registeredResource.getURL());
    }
}
Also used : InstallationState(org.apache.sling.installer.api.info.InstallationState) RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) TaskResource(org.apache.sling.installer.api.tasks.TaskResource) RegisteredResource(org.apache.sling.installer.api.tasks.RegisteredResource) Resource(org.apache.sling.installer.api.info.Resource) InstallableResource(org.apache.sling.installer.api.InstallableResource) ResourceGroup(org.apache.sling.installer.api.info.ResourceGroup)

Aggregations

RegisteredResource (org.apache.sling.installer.api.tasks.RegisteredResource)16 TaskResource (org.apache.sling.installer.api.tasks.TaskResource)6 TransformationResult (org.apache.sling.installer.api.tasks.TransformationResult)5 IOException (java.io.IOException)3 HashSet (java.util.HashSet)3 InstallableResource (org.apache.sling.installer.api.InstallableResource)3 InstallationState (org.apache.sling.installer.api.info.InstallationState)3 Resource (org.apache.sling.installer.api.info.Resource)3 ResourceGroup (org.apache.sling.installer.api.info.ResourceGroup)3 Test (org.junit.Test)3 InputStream (java.io.InputStream)2 URL (java.net.URL)2 ArrayList (java.util.ArrayList)2 TreeSet (java.util.TreeSet)2 Attributes (java.util.jar.Attributes)2 JarFile (java.util.jar.JarFile)2 Manifest (java.util.jar.Manifest)2 ZipEntry (java.util.zip.ZipEntry)2 ZipInputStream (java.util.zip.ZipInputStream)2 ResourceTransformer (org.apache.sling.installer.api.tasks.ResourceTransformer)2