Modulularized UI module, added multi file based i18n, using config mechanisms.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/20a11ab7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/20a11ab7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/20a11ab7 Branch: refs/heads/master Commit: 20a11ab7237d755e5cdfd81ae2ad0a2d8628c243 Parents: eb79d07 Author: anatole <anat...@apache.org> Authored: Sat Apr 16 08:25:46 2016 +0200 Committer: Oliver B. Fischer <ple...@apache.org> Committed: Tue Sep 27 00:18:31 2016 +0200 ---------------------------------------------------------------------- .../org/apache/tamaya/events/ui/EventView.java | 134 +++++++++++++++++++ .../services/org.apache.tamaya.ui.ViewProvider | 19 +++ src/main/resources/ui/lang/tamaya.properties | 5 + .../tamaya/events/RandomPropertySource.java | 48 +++++++ .../org.apache.tamaya.spi.PropertySource | 19 +++ .../services/org.apache.tamaya.ui.ViewProvider | 19 +++ src/test/resources/config/application.yml | 13 ++ 7 files changed, 257 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/main/java/org/apache/tamaya/events/ui/EventView.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tamaya/events/ui/EventView.java b/src/main/java/org/apache/tamaya/events/ui/EventView.java new file mode 100644 index 0000000..a69b04c --- /dev/null +++ b/src/main/java/org/apache/tamaya/events/ui/EventView.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.tamaya.events.ui; + +import com.vaadin.data.Property; +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.shared.ui.label.ContentMode; +import com.vaadin.ui.*; +import org.apache.tamaya.events.ConfigEvent; +import org.apache.tamaya.events.ConfigEventListener; +import org.apache.tamaya.events.ConfigEventManager; +import org.apache.tamaya.spi.ServiceContextManager; +import org.apache.tamaya.ui.UIConstants; +import org.apache.tamaya.ui.ViewProvider; +import org.apache.tamaya.ui.components.VerticalSpacedLayout; +import org.apache.tamaya.ui.services.MessageProvider; + +import javax.annotation.Priority; + + +public class EventView extends VerticalSpacedLayout implements View { + + @Priority(20) + public static final class Provider implements ViewProvider{ + + @Override + public ViewLifecycle getLifecycle() { + return ViewLifecycle.EAGER; + } + + @Override + public String getUrlPattern() { + return "/events"; + } + + @Override + public String getDisplayName() { + return "view.events.name"; + } + + @Override + public View createView(){ + return new EventView(); + } + } + + private CheckBox changeMonitorEnabled = new CheckBox(ServiceContextManager.getServiceContext() + .getService(MessageProvider.class).getMessage("view.events.button.enableMonitoring")); + private Button clearViewButton = new Button(ServiceContextManager.getServiceContext() + .getService(MessageProvider.class).getMessage("view.events.button.clearView")); + private Table eventsTable = new Table(ServiceContextManager.getServiceContext() + .getService(MessageProvider.class).getMessage("view.events.table.name")); + + + public EventView() { + Label caption = new Label(ServiceContextManager.getServiceContext() + .getService(MessageProvider.class).getMessage("view.events.name")); + Label description = new Label(ServiceContextManager.getServiceContext() + .getService(MessageProvider.class).getMessage("view.events.description"), + ContentMode.HTML); + + ConfigEventManager.addListener(new ConfigEventListener() { + @Override + public void onConfigEvent(ConfigEvent<?> event) { + addEvent(event); + } + }); + changeMonitorEnabled.addValueChangeListener(new Property.ValueChangeListener() { + @Override + public void valueChange(Property.ValueChangeEvent valueChangeEvent) { + ConfigEventManager.enableChangeMonitoring(changeMonitorEnabled.getValue()); + } + }); + clearViewButton.addClickListener(new Button.ClickListener() { + @Override + public void buttonClick(Button.ClickEvent clickEvent) { + eventsTable.removeAllItems(); + } + }); + + changeMonitorEnabled.setData(ConfigEventManager.isChangeMonitoring()); + eventsTable.addContainerProperty("Timestamp", Long.class, null); + eventsTable.addContainerProperty("Type", Class.class, null); + eventsTable.addContainerProperty("Payload", String.class, null); + eventsTable.addContainerProperty("Version", String.class, null); + eventsTable.setPageLength(20); + eventsTable.setWidth("100%"); + eventsTable.setResponsive(true); + + HorizontalLayout hl = new HorizontalLayout(); + hl.addComponents(changeMonitorEnabled, clearViewButton); + caption.addStyleName(UIConstants.LABEL_HUGE); + description.addStyleName(UIConstants.LABEL_LARGE); + addComponents(caption, description, hl, eventsTable); + } + + private void addEvent(ConfigEvent<?> evt){ + eventsTable.addItem(new Object[]{evt.getTimestamp(), evt.getResourceType().getSimpleName(), + String.valueOf(evt.getResource()),evt.getVersion()}); + this.markAsDirty(); + } + + + private String getCaption(String key, String value) { + int index = key.lastIndexOf('.'); + if(index<0){ + return key + " = " + value; + }else{ + return key.substring(index+1) + " = " + value; + } + } + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider ---------------------------------------------------------------------- diff --git a/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider new file mode 100644 index 0000000..f779d5c --- /dev/null +++ b/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider @@ -0,0 +1,19 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 current 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. +# +org.apache.tamaya.events.ui.EventView$Provider \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/main/resources/ui/lang/tamaya.properties ---------------------------------------------------------------------- diff --git a/src/main/resources/ui/lang/tamaya.properties b/src/main/resources/ui/lang/tamaya.properties new file mode 100644 index 0000000..37ca420 --- /dev/null +++ b/src/main/resources/ui/lang/tamaya.properties @@ -0,0 +1,5 @@ +view.events.name=Configuration Events +view.events.table.name=Observed Events +view.events.button.enableMonitoring=Change Monitor active +view.events.button.clearView=Clear View +view.events.description=This view shows the configuration events triggered in the system. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/test/java/org/apache/tamaya/events/RandomPropertySource.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/tamaya/events/RandomPropertySource.java b/src/test/java/org/apache/tamaya/events/RandomPropertySource.java new file mode 100644 index 0000000..f32ead7 --- /dev/null +++ b/src/test/java/org/apache/tamaya/events/RandomPropertySource.java @@ -0,0 +1,48 @@ +package org.apache.tamaya.events; + +import org.apache.tamaya.spi.PropertySource; +import org.apache.tamaya.spi.PropertyValue; + +import java.util.HashMap; +import java.util.Map; + +/** + * PropertySource that provides a randome entry, different on each access! + */ +public class RandomPropertySource implements PropertySource{ + + private Map<String, String> data = new HashMap<>(); + + @Override + public int getOrdinal() { + return 0; + } + + @Override + public String getName() { + return "random"; + } + + @Override + public PropertyValue get(String key) { + if(key.equals("random.new")){ + return PropertyValue.of(key, String.valueOf(Math.random()),getName()); + } + return null; + } + + @Override + public Map<String, String> getProperties() { + synchronized(data) { + data.put("random.new", String.valueOf(Math.random())); + data.put("_random.new.source", getName()); + data.put("_random.new.timestamp", String.valueOf(System.currentTimeMillis())); + return new HashMap<>(data); + } + } + + @Override + public boolean isScannable() { + return true; + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource ---------------------------------------------------------------------- diff --git a/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource new file mode 100644 index 0000000..9c2b9f6 --- /dev/null +++ b/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource @@ -0,0 +1,19 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 current 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. +# +org.apache.tamaya.events.RandomPropertySource http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider ---------------------------------------------------------------------- diff --git a/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider new file mode 100644 index 0000000..f779d5c --- /dev/null +++ b/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider @@ -0,0 +1,19 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 current 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. +# +org.apache.tamaya.events.ui.EventView$Provider \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/20a11ab7/src/test/resources/config/application.yml ---------------------------------------------------------------------- diff --git a/src/test/resources/config/application.yml b/src/test/resources/config/application.yml new file mode 100644 index 0000000..9ec8d5b --- /dev/null +++ b/src/test/resources/config/application.yml @@ -0,0 +1,13 @@ +server: + type: default + maxThreads: 1024 + applicationConnectors: + - type: http + port: 8090 + - type: https + port: 8453 + adminConnectors: + - type: http + port: 8091 + - type: https + port: 8453 \ No newline at end of file