blob: 74d083edd2d7ba4a7266222b0ab90532349cab6f [file] [log] [blame]
/*
* 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.myfaces.tobago.example.demo;
import org.apache.myfaces.tobago.component.UIBar;
import org.apache.myfaces.tobago.component.UIBox;
import org.apache.myfaces.tobago.component.UIButton;
import org.apache.myfaces.tobago.component.UIButtons;
import org.apache.myfaces.tobago.component.UIColumn;
import org.apache.myfaces.tobago.component.UIColumnNode;
import org.apache.myfaces.tobago.component.UIColumnSelector;
import org.apache.myfaces.tobago.component.UIDate;
import org.apache.myfaces.tobago.component.UIEvent;
import org.apache.myfaces.tobago.component.UIFigure;
import org.apache.myfaces.tobago.component.UIFile;
import org.apache.myfaces.tobago.component.UIFlexLayout;
import org.apache.myfaces.tobago.component.UIFlowLayout;
import org.apache.myfaces.tobago.component.UIFooter;
import org.apache.myfaces.tobago.component.UIForm;
import org.apache.myfaces.tobago.component.UIGridLayout;
import org.apache.myfaces.tobago.component.UIHeader;
import org.apache.myfaces.tobago.component.UIHidden;
import org.apache.myfaces.tobago.component.UIImage;
import org.apache.myfaces.tobago.component.UIIn;
import org.apache.myfaces.tobago.component.UILabel;
import org.apache.myfaces.tobago.component.UILink;
import org.apache.myfaces.tobago.component.UILinks;
import org.apache.myfaces.tobago.component.UIMessages;
import org.apache.myfaces.tobago.component.UIObject;
import org.apache.myfaces.tobago.component.UIOut;
import org.apache.myfaces.tobago.component.UIPage;
import org.apache.myfaces.tobago.component.UIPanel;
import org.apache.myfaces.tobago.component.UIPopup;
import org.apache.myfaces.tobago.component.UIProgress;
import org.apache.myfaces.tobago.component.UIRow;
import org.apache.myfaces.tobago.component.UISection;
import org.apache.myfaces.tobago.component.UISegmentLayout;
import org.apache.myfaces.tobago.component.UISelectBooleanCheckbox;
import org.apache.myfaces.tobago.component.UISelectManyCheckbox;
import org.apache.myfaces.tobago.component.UISelectManyListbox;
import org.apache.myfaces.tobago.component.UISelectManyShuttle;
import org.apache.myfaces.tobago.component.UISelectOneChoice;
import org.apache.myfaces.tobago.component.UISelectOneListbox;
import org.apache.myfaces.tobago.component.UISelectOneRadio;
import org.apache.myfaces.tobago.component.UISeparator;
import org.apache.myfaces.tobago.component.UISheet;
import org.apache.myfaces.tobago.component.UISuggest;
import org.apache.myfaces.tobago.component.UITab;
import org.apache.myfaces.tobago.component.UITabGroup;
import org.apache.myfaces.tobago.component.UITextarea;
import org.apache.myfaces.tobago.component.UITree;
import org.apache.myfaces.tobago.component.UITreeCommand;
import org.apache.myfaces.tobago.component.UITreeIcon;
import org.apache.myfaces.tobago.component.UITreeIndent;
import org.apache.myfaces.tobago.component.UITreeLabel;
import org.apache.myfaces.tobago.component.UITreeListbox;
import org.apache.myfaces.tobago.component.UITreeSelect;
import org.apache.myfaces.tobago.util.ComponentUtils;
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIComponentBase;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Named;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@SessionScoped
@Named
public class EventController implements Serializable {
private List<EventsOnComponent> eventsOnComponents = new ArrayList<>();
private EventsOnComponent selectedComponent;
private String eventName;
private int action = 0;
private int actionListener = 0;
private int ajaxListener = 0;
private int valueChangeListener = 0;
private List<SolarObject> planets = new ArrayList<>();
public EventController() {
eventsOnComponents.add(new EventsOnComponent(new UIBar()));
eventsOnComponents.add(new EventsOnComponent(new UIBox()));
eventsOnComponents.add(new EventsOnComponent(new UIButton()));
eventsOnComponents.add(new EventsOnComponent(new UIButtons()));
eventsOnComponents.add(new EventsOnComponent(new UIColumn()));
eventsOnComponents.add(new EventsOnComponent(new UIColumnNode()));
eventsOnComponents.add(new EventsOnComponent(new UIColumnSelector()));
eventsOnComponents.add(new EventsOnComponent(new UIDate()));
eventsOnComponents.add(new EventsOnComponent(new UIEvent()));
eventsOnComponents.add(new EventsOnComponent(new UIFigure()));
eventsOnComponents.add(new EventsOnComponent(new UIFile()));
eventsOnComponents.add(new EventsOnComponent(new UIFlexLayout()));
eventsOnComponents.add(new EventsOnComponent(new UIFlowLayout()));
eventsOnComponents.add(new EventsOnComponent(new UIFooter()));
eventsOnComponents.add(new EventsOnComponent(new UIForm()));
eventsOnComponents.add(new EventsOnComponent(new UIGridLayout()));
eventsOnComponents.add(new EventsOnComponent(new UIHeader()));
eventsOnComponents.add(new EventsOnComponent(new UIHidden()));
eventsOnComponents.add(new EventsOnComponent(new UIImage()));
eventsOnComponents.add(new EventsOnComponent(new UIIn()));
eventsOnComponents.add(new EventsOnComponent(new UILabel()));
eventsOnComponents.add(new EventsOnComponent(new UILink()));
eventsOnComponents.add(new EventsOnComponent(new UILinks()));
eventsOnComponents.add(new EventsOnComponent(new UIMessages()));
eventsOnComponents.add(new EventsOnComponent(new UIObject()));
eventsOnComponents.add(new EventsOnComponent(new UIOut()));
eventsOnComponents.add(new EventsOnComponent(new UIPage()));
eventsOnComponents.add(new EventsOnComponent(new UIPanel()));
eventsOnComponents.add(new EventsOnComponent(new UIPopup()));
eventsOnComponents.add(new EventsOnComponent(new UIProgress()));
eventsOnComponents.add(new EventsOnComponent(new UIRow()));
eventsOnComponents.add(new EventsOnComponent(new UISection()));
eventsOnComponents.add(new EventsOnComponent(new UISegmentLayout()));
eventsOnComponents.add(new EventsOnComponent(new UISelectBooleanCheckbox()));
eventsOnComponents.add(new EventsOnComponent(new UISelectManyCheckbox()));
eventsOnComponents.add(new EventsOnComponent(new UISelectManyListbox()));
eventsOnComponents.add(new EventsOnComponent(new UISelectManyShuttle()));
eventsOnComponents.add(new EventsOnComponent(new UISelectOneChoice()));
eventsOnComponents.add(new EventsOnComponent(new UISelectOneListbox()));
eventsOnComponents.add(new EventsOnComponent(new UISelectOneRadio()));
eventsOnComponents.add(new EventsOnComponent(new UISeparator()));
eventsOnComponents.add(new EventsOnComponent(new UISheet()));
eventsOnComponents.add(new EventsOnComponent(new UISuggest()));
eventsOnComponents.add(new EventsOnComponent(new UITab()));
eventsOnComponents.add(new EventsOnComponent(new UITabGroup()));
eventsOnComponents.add(new EventsOnComponent(new UITextarea()));
eventsOnComponents.add(new EventsOnComponent(new UITree()));
eventsOnComponents.add(new EventsOnComponent(new UITreeCommand()));
eventsOnComponents.add(new EventsOnComponent(new UITreeIcon()));
eventsOnComponents.add(new EventsOnComponent(new UITreeIndent()));
eventsOnComponents.add(new EventsOnComponent(new UITreeLabel()));
eventsOnComponents.add(new EventsOnComponent(new UITreeListbox()));
eventsOnComponents.add(new EventsOnComponent(new UITreeSelect()));
planets.add(new SolarObject("Mercury", "I", "Sun", 57910, 87.97, 7.00, 0.21, "-", null));
planets.add(new SolarObject("Venus", "II", "Sun", 108200, 224.70, 3.39, 0.01, "-", null));
planets.add(new SolarObject("Earth", "III", "Sun", 149600, 365.26, 0.00, 0.02, "-", null));
planets.add(new SolarObject("Mars", "IV", "Sun", 227940, 686.98, 1.85, 0.09, "-", null));
planets.add(new SolarObject("Jupiter", "V", "Sun", 778330, 4332.71, 1.31, 0.05, "-", null));
planets.add(new SolarObject("Saturn", "VI", "Sun", 1429400, 10759.50, 2.49, 0.06, "-", null));
planets.add(new SolarObject("Uranus", "VII", "Sun", 2870990, 30685.0, 0.77, 0.05, "Herschel", 1781));
planets.add(new SolarObject("Neptune", "VIII", "Sun", 4504300, 60190.0, 1.77, 0.01, "Adams", 1846));
}
public void reset() {
action = 0;
actionListener = 0;
ajaxListener = 0;
valueChangeListener = 0;
}
public List<EventsOnComponent> getEventsOnComponents() {
return eventsOnComponents;
}
public EventsOnComponent getSelectedComponent() {
return selectedComponent;
}
public String getEventName() {
return eventName;
}
public void selectComponent(final ActionEvent actionEvent) {
final UIData data = ComponentUtils.findAncestor(actionEvent.getComponent(), UIData.class);
selectedComponent = data != null ? ((EventsOnComponent) data.getRowData()) : null;
eventName = actionEvent.getComponent().getAttributes().get("eventName").toString();
}
public void action() {
action++;
}
public void actionListener(final ActionEvent event) {
actionListener++;
}
public void ajaxListener(final AjaxBehaviorEvent event) {
ajaxListener++;
}
public void valueChangeListener(final ValueChangeEvent event) {
valueChangeListener++;
}
public int getActionCount() {
return action;
}
public int getActionListenerCount() {
return actionListener;
}
public int getAjaxListenerCount() {
return ajaxListener;
}
public int getValueChangeListenerCount() {
return valueChangeListener;
}
public long getCurrentTimestamp() {
return new Date().getTime();
}
public List<SolarObject> getPlanets() {
return planets;
}
public class EventsOnComponent implements Serializable {
private final String tagName;
private final Collection<String> eventNames = new TreeSet<>();
EventsOnComponent(final UIComponentBase component) {
final String simpleName = component.getClass().getSimpleName();
tagName = simpleName.substring(2, 3).toLowerCase() + simpleName.substring(3);
if (component.getEventNames() != null) {
this.eventNames.addAll(component.getEventNames());
}
}
public String getTagName() {
return tagName;
}
public boolean hasBlurEvent() {
return eventNames.contains(CommonEvent.blur.name());
}
public boolean hasChangeEvent() {
return eventNames.contains(CommonEvent.change.name());
}
public boolean hasClickEvent() {
return eventNames.contains(CommonEvent.click.name());
}
public boolean hasDblclickEvent() {
return eventNames.contains(CommonEvent.dblclick.name());
}
public boolean hasFocusEvent() {
return eventNames.contains(CommonEvent.focus.name());
}
public boolean hasKeydownEvent() {
return eventNames.contains(CommonEvent.keydown.name());
}
public boolean hasKeypressEvent() {
return eventNames.contains(CommonEvent.keypress.name());
}
public boolean hasKeyupEvent() {
return eventNames.contains(CommonEvent.keyup.name());
}
public boolean hasMousedownEvent() {
return eventNames.contains(CommonEvent.mousedown.name());
}
public boolean hasMousemoveEvent() {
return eventNames.contains(CommonEvent.mousemove.name());
}
public boolean hasMouseoutEvent() {
return eventNames.contains(CommonEvent.mouseout.name());
}
public boolean hasMouseoverEvent() {
return eventNames.contains(CommonEvent.mouseover.name());
}
public boolean hasMouseupEvent() {
return eventNames.contains(CommonEvent.mouseup.name());
}
public boolean hasSelectEvent() {
return eventNames.contains(CommonEvent.select.name());
}
public String getSpecialEvents() {
final Set<String> specialEventNames = new TreeSet<>();
for (final String name : eventNames) {
boolean isSpecialEvent = true;
for (final CommonEvent commonEvent : CommonEvent.values()) {
if (name.equals(commonEvent.name())) {
isSpecialEvent = false;
}
}
if (isSpecialEvent) {
specialEventNames.add(name);
}
}
return specialEventNames.size() > 0 ? concatStrings(specialEventNames) : "";
}
private String concatStrings(final Set<String> strings) {
final StringBuilder stringBuilder = new StringBuilder();
int i = 0;
for (final String string : strings) {
i++;
stringBuilder.append(string);
if (i < strings.size()) {
stringBuilder.append(", ");
}
}
return stringBuilder.toString();
}
}
private enum CommonEvent {
change,
click, dblclick,
focus, blur,
keydown, keypress, keyup,
mousedown, mousemove, mouseout, mouseover, mouseup,
select
}
}