/*
* (C) Copyright 2006-2010 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* bstefanescu
*/
package org.nuxeo.runtime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.*;
import org.nuxeo.runtime.model.ContributionFragmentRegistry;
/**
* @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
*/
public class ContributionFragmentTest {
static class MyContrib {
protected String id;
protected String title;
protected List<String> args;
public MyContrib(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getTitle() {
return title;
}
public List<String> getArgs() {
return args;
}
}
static class MyRegistry extends ContributionFragmentRegistry<MyContrib> {
Map<String, MyContrib> registry = new HashMap<String, MyContrib>();
@Override
public String getContributionId(MyContrib contrib) {
return contrib.getId();
}
@Override
public void contributionUpdated(String id, MyContrib contrib, MyContrib origContrib) {
registry.put(id, contrib);
}
@Override
public void contributionRemoved(String id, MyContrib origContrib) {
registry.remove(id);
}
@Override
public MyContrib clone(MyContrib object) {
MyContrib clone = new MyContrib(object.getId());
clone.title = object.title;
if (object.args != null) {
clone.args = new ArrayList<String>(object.args);
}
return clone;
}
@Override
public void merge(MyContrib src, MyContrib dst) {
dst.title = src.title;
if (dst.args == null) {
dst.args = new ArrayList<String>();
}
if (src.args != null) {
dst.args.addAll(src.args);
}
}
public Map<String, MyContrib> getRegistry() {
return registry;
}
}
public static List<String> newList(String... args) {
return Arrays.asList(args);
}
@Test
public void testRegistry() throws Exception {
MyRegistry reg = new MyRegistry();
MyContrib c1 = new MyContrib("c1");
c1.title = "c1 title";
reg.addContribution(c1);
MyContrib c11 = new MyContrib("c1");
c11.title = "c11 title";
c11.args = new ArrayList<String>(Arrays.asList(new String[] { "a", "b" }));
reg.addContribution(c11);
MyContrib c2 = new MyContrib("c2");
c2.title = "c2 title";
c2.args = new ArrayList<String>(Arrays.asList(new String[] { "a", "b" }));
reg.addContribution(c2);
MyContrib c21 = new MyContrib("c2");
c21.args = new ArrayList<String>(Arrays.asList(new String[] { "c", "d" }));
reg.addContribution(c21);
assertEquals("c1", reg.getRegistry().get("c1").getId());
assertEquals("c11 title", reg.getRegistry().get("c1").getTitle());
assertEquals(newList("a", "b"), reg.getRegistry().get("c1").getArgs());
assertEquals("c2", reg.getRegistry().get("c2").getId());
assertNull(reg.getRegistry().get("c2").getTitle());
assertEquals(newList("a", "b", "c", "d"), reg.getRegistry().get("c2").getArgs());
reg.removeContribution(c21);
assertEquals("c2", reg.getRegistry().get("c2").getId());
assertEquals("c2 title", reg.getRegistry().get("c2").getTitle());
assertEquals(newList("a", "b"), reg.getRegistry().get("c2").getArgs());
reg.removeContribution(c2);
assertNull(reg.getRegistry().get("c2"));
assertEquals("c1", reg.getRegistry().get("c1").getId());
assertEquals("c11 title", reg.getRegistry().get("c1").getTitle());
assertEquals(newList("a", "b"), reg.getRegistry().get("c1").getArgs());
assertEquals(1, reg.getRegistry().size());
}
}