| package org.apache.karaf.webconsole.osgi.internal; |
| |
| import org.apache.karaf.features.Feature; |
| import org.apache.karaf.features.FeaturesService; |
| import org.apache.karaf.features.Repository; |
| import org.apache.karaf.webconsole.core.BasePage; |
| import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable; |
| import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; |
| import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; |
| import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; |
| import org.apache.wicket.model.IModel; |
| import org.apache.wicket.model.Model; |
| import org.apache.wicket.model.StringResourceModel; |
| import org.ops4j.pax.wicket.api.PaxWicketBean; |
| |
| import java.util.*; |
| |
| /** |
| * Features |
| */ |
| public class FeaturesPage extends BasePage { |
| |
| @PaxWicketBean(name = "featuresService") |
| private FeaturesService featuresService; |
| |
| /** |
| * Constructor that is invoked when page is invoked without a session. |
| * |
| * @param parameters Page parameters |
| */ |
| public FeaturesPage() throws Exception { |
| |
| Repository[] repositories = featuresService.listRepositories(); |
| Feature[] features; |
| List<ExtendedFeature> model = new ArrayList<ExtendedFeature>(); |
| |
| for (Repository r : repositories) { |
| features = r.getFeatures(); |
| for (Feature f : features) { |
| ExtendedFeature.State state = |
| featuresService.isInstalled(f) ? ExtendedFeature.State.INSTALLED : ExtendedFeature.State.UNINSTALLED; |
| ExtendedFeature extendedFeature = new ExtendedFeature( state, r.getName(), f ); |
| |
| // add extended feature to Wicket model |
| model.add(extendedFeature); |
| } |
| } |
| |
| IModel state = Model.of("state"); |
| IModel version = Model.of("version"); |
| IModel name = Model.of("name"); |
| IModel repository = Model.of("repository"); |
| IModel description = Model.of("description"); |
| |
| List<IColumn<ExtendedFeature>> columns = new ArrayList<IColumn<ExtendedFeature>>(); |
| columns.add(new PropertyColumn<ExtendedFeature>(new StringResourceModel("table.state",this,state),"state","state")); |
| columns.add(new PropertyColumn<ExtendedFeature>(new StringResourceModel("table.version",this,version),"version","version")); |
| columns.add(new PropertyColumn<ExtendedFeature>(new StringResourceModel("table.name",this,state),"name","name")); |
| columns.add(new PropertyColumn<ExtendedFeature>(new StringResourceModel("table.repository",this,repository),"repository","repository")); |
| columns.add(new PropertyColumn<ExtendedFeature>(new StringResourceModel("table.description",this,description),"description","description")); |
| |
| add(new DefaultDataTable<ExtendedFeature>("features", columns, |
| new FeaturesProvider(model), 20)); |
| |
| } |
| |
| |
| static class FeaturesProvider extends SortableDataProvider<ExtendedFeature> { |
| |
| List<ExtendedFeature> model; |
| |
| public FeaturesProvider(List model) { |
| this.model = model; |
| setSort("name", true); |
| } |
| |
| public Iterator<? extends ExtendedFeature> iterator(int first, int count) { |
| List<ExtendedFeature> data = new ArrayList<ExtendedFeature>(model); |
| Collections.sort(data, new Comparator<ExtendedFeature>() { |
| |
| public int compare(ExtendedFeature o1, ExtendedFeature o2) { |
| int dir = getSort().isAscending() ? 1 : -1; |
| |
| if ("name".equals(getSort().getProperty())) { |
| return dir * (o1.getName().compareTo(o2.getName())); |
| } else if ("repository".equals(getSort().getProperty())) { |
| return dir * (o1.getRepository().compareTo(o2.getRepository())); |
| } else { |
| return dir * (o1.getName().compareTo(o2.getName())); |
| } |
| } |
| }); |
| return data.subList(first, Math.min(first + count, data.size())) |
| .iterator(); |
| } |
| |
| public int size() { |
| return model.size(); |
| } |
| |
| public IModel<ExtendedFeature> model(ExtendedFeature object) { |
| return Model.of(object); |
| } |
| |
| } |
| |
| |
| } |