blob: 12efe33cace172a3997db6f17aa7e78484bcdf80 [file] [log] [blame]
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.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);
}
}
/* add(new ListView<ExtendedFeature>("features", model) {
@Override
protected void populateItem(ListItem<ExtendedFeature> item) {
final ExtendedFeature feature = item.getModelObject();
item.add(new Label("state", feature.getState().toString()));
item.add(new Label("version", feature.getVersion()));
item.add(new Label("name", feature.getName()));
item.add(new Label("repository", feature.getRepository()));
item.add(new Label("description", feature.getDescription()));
item.add(new Link("featuresDetailsPageLink") {
@Override
public void onClick() {
PageParameters params = new PageParameters();
params.put("featureId", feature.getId());
}
});
}
});*/
List<IColumn<ExtendedFeature>> columns = new ArrayList<IColumn<ExtendedFeature>>();
columns.add(new PropertyColumn<ExtendedFeature>(Model.of("state"), "state",
"state"));
columns.add(new PropertyColumn<ExtendedFeature>(Model.of("version"), "version",
"version"));
columns.add(new PropertyColumn<ExtendedFeature>(Model.of("name"), "name",
"name"));
columns.add(new PropertyColumn<ExtendedFeature>(Model.of("repository"), "repository",
"repository"));
columns.add(new PropertyColumn<ExtendedFeature>(Model.of("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);
}
}
}