/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ /** * */ package org.jabylon.rest.ui.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.IModel; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.ecore.EStructuralFeature; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) */ public class ComplexEObjectListDataProvider<R extends CDOObject> implements IDataProvider<R>, IModel<List<R>> { private static final long serialVersionUID = 1L; private String featureName; private IModel<? extends CDOObject> model; public ComplexEObjectListDataProvider(IModel<? extends CDOObject> model, EStructuralFeature feature) { this.model = model; featureName = feature.getName(); } @SuppressWarnings("unchecked") @Override public Iterator< ? extends R> iterator(long arg0, long arg1) { CDOObject parent = model.getObject(); EStructuralFeature feature = parent.eClass().getEStructuralFeature(featureName); List<R> result = (List<R>)parent.eGet(feature); return result.subList((int)arg0, (int)arg1).iterator(); } @SuppressWarnings("unchecked") @Override public long size() { CDOObject parent = model.getObject();; EStructuralFeature feature = parent.eClass().getEStructuralFeature(featureName); List<R> result = (List<R>)parent.eGet(feature); return result.size(); } @Override public IModel<R> model(R object) { return new EObjectModel<R>(object); } @Override public void detach() { model.detach(); } @Override public List<R> getObject() { CDOObject parent = model.getObject(); EStructuralFeature feature = parent.eClass().getEStructuralFeature(featureName); List<R> result = (List<R>)parent.eGet(feature); return result; } @Override public void setObject(List<R> object) { CDOObject parent = model.getObject(); EStructuralFeature feature = parent.eClass().getEStructuralFeature(featureName); parent.eSet(feature, new ArrayList<R>(object)); } public IModel<? extends CDOObject> getModel() { return model; } }