-
Notifications
You must be signed in to change notification settings - Fork 27
/
AddonImpl.java
116 lines (97 loc) · 2.76 KB
/
AddonImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.furnace.impl.addons;
import java.util.Set;
import java.util.concurrent.Future;
import org.jboss.forge.furnace.addons.Addon;
import org.jboss.forge.furnace.addons.AddonDependency;
import org.jboss.forge.furnace.addons.AddonId;
import org.jboss.forge.furnace.addons.AddonStatus;
import org.jboss.forge.furnace.event.EventManager;
import org.jboss.forge.furnace.impl.util.ExceptionFuture;
import org.jboss.forge.furnace.impl.util.NullFuture;
import org.jboss.forge.furnace.repositories.AddonRepository;
import org.jboss.forge.furnace.spi.ServiceRegistry;
import org.jboss.forge.furnace.util.Assert;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class AddonImpl implements Addon
{
private final AddonId id;
private AddonStateManager manager;
public AddonImpl(AddonStateManager manager, AddonId id)
{
Assert.notNull(manager, "Manager must not be null.");
Assert.notNull(id, "AddonId must not be null.");
this.id = id;
this.manager = manager;
}
@Override
public AddonId getId()
{
return id;
}
@Override
public Set<AddonDependency> getDependencies()
{
return manager.getDependenciesOf(this);
}
@Override
public ClassLoader getClassLoader()
{
return manager.getClassLoaderOf(this);
}
@Override
public EventManager getEventManager()
{
return manager.getEventManagerOf(this);
}
@Override
public Future<Void> getFuture()
{
return manager.getFutureOf(this);
}
@Override
public AddonRepository getRepository()
{
return manager.getRepositoryOf(this);
}
@Override
public ServiceRegistry getServiceRegistry()
{
return manager.getServiceRegistryOf(this);
}
@Override
public AddonStatus getStatus()
{
AddonStatus result = AddonStatus.MISSING;
if (getClassLoader() != null)
result = AddonStatus.LOADED;
if (getFuture() != null)
{
if (!(getFuture() instanceof NullFuture))
{
if (getFuture().isDone())
result = AddonStatus.STARTED;
if (getFuture() instanceof ExceptionFuture || getFuture().isCancelled())
result = AddonStatus.FAILED;
}
}
return result;
}
@Override
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append(getId().toCoordinates() + " +" + getStatus());
if (getFuture() == null)
builder.append(" READY");
builder.append(" HC: ").append(hashCode());
return builder.toString();
}
}