/** * GRANITE DATA SERVICES * Copyright (C) 2006-2015 GRANITE DATA SERVICES S.A.S. * * This file is part of the Granite Data Services Platform. * * Granite Data Services is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * Granite Data Services is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA, or see <http://www.gnu.org/licenses/>. */ package org.granite.test.tide.data; import java.util.ArrayList; import java.util.List; import org.granite.tide.data.DataObserveParams; import org.granite.tide.data.DataPublishParams; import org.granite.tide.data.DataTopicParams; import org.junit.Assert; import org.junit.Test; public class TestDataSelector { @Test public void testSelector1() { DataObserveParams observe = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser"); policy1.observes(observe); String selector = observe.updateDataSelector(null, new ArrayList<DataObserveParams>()); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user = 'someUser'))", selector); } @Test public void testSelector2() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); SitePolicy policy1 = new SitePolicy(); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); UserPolicy policy2 = new UserPolicy("someUser"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite') OR (user = 'someUser'))", selector); } @Test public void testSelector3() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); UserPolicy policy2 = new UserPolicy("someUser"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user = 'someUser') OR (user = 'someUser'))", selector); } @Test public void testSelector4() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); UserPolicy policy2 = new UserPolicy("someUser2"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user = 'someUser') OR (user = 'someUser2'))", selector); } @Test public void testSelector5() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser1"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); CompositePolicy policy2 = new CompositePolicy("someSite", "someUser2"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user = 'someUser1') OR (site = 'someSite' AND user = 'someUser2'))", selector); } @Test public void testSelector6() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); CompositePolicy policy2 = new CompositePolicy("someSite", "someUser"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user = 'someUser'))", selector); } @Test public void testSelector7() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CompositePolicy policy1 = new CompositePolicy("someSite", "someUser1"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); DataObserveParams observe2 = new DataObserveParams(); CompositePolicy policy2 = new CompositePolicy("someSite", "someUser1", "someUser2"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND ((site = 'someSite' AND user IN ('someUser1', 'someUser2')))", selector); } @Test public void testSelector8() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CustomPolicy policy1 = new CustomPolicy("someSite", "someUser"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); Assert.assertEquals("type = 'DATA' AND (((site = 'someSite' OR user = 'someUser')))", selector); DataObserveParams observe2 = new DataObserveParams(); CompositePolicy policy2 = new CompositePolicy("someSite2", "someUser2"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND (((site = 'someSite' OR user = 'someUser')) OR (site = 'someSite2' AND user = 'someUser2'))", selector); } @Test public void testSelector9() { List<DataObserveParams> selectors = new ArrayList<DataObserveParams>(); DataObserveParams observe1 = new DataObserveParams(); CustomPolicy policy1 = new CustomPolicy("someSite", "someUser"); policy1.observes(observe1); String selector = observe1.updateDataSelector(null, selectors); Assert.assertEquals("type = 'DATA' AND (((site = 'someSite' OR user = 'someUser')))", selector); DataObserveParams observe2 = new DataObserveParams(); CustomPolicy policy2 = new CustomPolicy("someSite", "someUser"); policy2.observes(observe2); selector = observe2.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND (((site = 'someSite' OR user = 'someUser')))", selector); DataObserveParams observe3 = new DataObserveParams(); CustomPolicy policy3 = new CustomPolicy("someSite2", "someUser2"); policy3.observes(observe3); selector = observe3.updateDataSelector(selector, selectors); Assert.assertEquals("type = 'DATA' AND (((site = 'someSite' OR user = 'someUser')) OR ((site = 'someSite2' OR user = 'someUser2')))", selector); } public static class CompositePolicy implements DataTopicParams { private String site; private String[] user; public CompositePolicy(String site, String... user) { this.site = site; this.user = user; } @Override public void observes(DataObserveParams params) { params.addValue("site", site); for (String user : this.user) params.addValue("user", user); } @Override public void publishes(DataPublishParams params, Object entity) { } } public static class SitePolicy implements DataTopicParams { @Override public void observes(DataObserveParams params) { params.addValue("site", "someSite"); } @Override public void publishes(DataPublishParams params, Object entity) { } } public static class UserPolicy implements DataTopicParams { private String user; public UserPolicy(String user) { this.user = user; } @Override public void observes(DataObserveParams params) { params.addValue("user", user); } @Override public void publishes(DataPublishParams params, Object entity) { } } public static class CustomPolicy implements DataTopicParams { private String site; private String user; public CustomPolicy(String site, String user) { this.site = site; this.user = user; } @Override public void observes(DataObserveParams params) { params.setSelector("site = '" + site + "' OR user = '" + user + "'"); } @Override public void publishes(DataPublishParams params, Object entity) { } } }