blob: 71d177356de4e85e6e83fd90d3872f4603e97d56 [file] [log] [blame]
package org.apache.karaf.webconsole.karaf.internal.repository;
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.io.Serializable;
import java.net.URI;
import java.util.*;
public class RepositoriesPage extends BasePage {
@PaxWicketBean(name = "featuresService")
private FeaturesService featuresService;
public RepositoriesPage() {
List<ExtendedRepository> repos = new LinkedList<ExtendedRepository>();
for (Repository repo : featuresService.listRepositories()) {
repos.add(new ExtendedRepository(repo));
}
IColumn[] columns = new IColumn[] {
new PropertyColumn<Repository>(Model.of("name"), "name", "name"),
new PropertyColumn<Repository>(Model.of("URI"), "URI", "URI"),
new PropertyColumn<Repository>(Model.of("valid"), "valid", "valid"),
};
add(new DefaultDataTable<ExtendedRepository>("repositories", columns, new RepositoriesProvider(repos), 20));
}
static class RepositoriesProvider extends SortableDataProvider<ExtendedRepository> {
List<ExtendedRepository> model;
public RepositoriesProvider(List model) {
this.model = model;
setSort("name", true);
}
public Iterator<? extends ExtendedRepository> iterator(int first, int count) {
List<ExtendedRepository> data = new ArrayList<ExtendedRepository>(model);
Collections.sort(data, new Comparator<ExtendedRepository>() {
public int compare(ExtendedRepository o1, ExtendedRepository o2) {
int dir = getSort().isAscending() ? 1 : -1;
if ("name".equals(getSort().getProperty())) {
return dir * (o1.getName().compareTo(o2.getName()));
} 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<ExtendedRepository> model(ExtendedRepository object) {
return Model.of(object);
}
}
class ExtendedRepository implements Repository, Serializable {
private final Repository repository;
public ExtendedRepository(Repository r) {
this.repository = r;
}
public String getName() {
return repository.getName();
}
public URI getURI() {
return repository.getURI();
}
public URI[] getRepositories() throws Exception {
return repository.getRepositories();
}
public Feature[] getFeatures() throws Exception {
return repository.getFeatures();
}
public boolean isValid() {
return repository.isValid();
}
}
}