/*
* Copyright 2006 Luca Garulli (luca.garulli--at--assetdata.it)
*
* 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.
*/
package org.romaframework.aspect.flow;
import java.util.Map;
import java.util.Stack;
import org.romaframework.aspect.session.SessionInfo;
import org.romaframework.core.Roma;
import org.romaframework.core.flow.Controller;
import org.romaframework.core.flow.SchemaActionListener;
import org.romaframework.core.module.SelfRegistrantConfigurableModule;
import org.romaframework.core.schema.SchemaAction;
import org.romaframework.core.schema.SchemaClassDefinition;
import org.romaframework.core.schema.SchemaEvent;
import org.romaframework.frontend.domain.message.Message;
import org.romaframework.frontend.domain.message.MessageOk;
import org.romaframework.frontend.domain.message.MessageResponseListener;
import org.romaframework.frontend.domain.message.MessageYesNo;
/**
* Abstract implementation for Flow Aspect.
*
* @author Luca Garulli (luca.garulli--at--assetdata.it)
*/
public abstract class FlowAspectAbstract extends SelfRegistrantConfigurableModule<String> implements FlowAspect, SchemaActionListener {
@Override
public void startup() {
Controller.getInstance().registerListener(SchemaActionListener.class, this);
}
public void beginConfigClass(SchemaClassDefinition iClass) {
}
public void endConfigClass(SchemaClassDefinition iClass) {
}
public void configAction(SchemaAction iAction) {
}
public void configEvent(SchemaEvent iEvent) {
}
public String aspectName() {
return ASPECT_NAME;
}
public void forward(Object iNextObject) {
forward(iNextObject, null);
}
public void forward(Object iNextObject, String iPosition) {
forward(iNextObject, iPosition, null, null);
}
public Object back() {
return back(null, null);
}
public Object back(String area) {
return back(area, null);
}
public Object backDefault() {
return back(Roma.view().getScreen().getDefautlArea());
}
public void forwardDefault(Object iNextObject) {
forward(iNextObject, Roma.view().getScreen().getDefautlArea());
}
public Object back(SessionInfo iSession) {
return back(null, iSession);
}
public Object currentDefault() {
return current(Roma.view().getScreen().getDefautlArea());
}
public Map<String, Object> current() {
return current((SessionInfo) null);
}
public Object current(String area) {
return current(area, null);
}
public void popup(Object popup) {
popup(popup, true);
}
public Map<String, Stack<Object>> getHistory() {
return getHistory(null);
}
public void alert(String iTitle, String iBody) {
alert(iTitle, iBody, null);
}
public void alert(String iTitle, String iBody, final AlertListener iListener) {
if (iListener == null) {
popup(new MessageOk("", iTitle, null, iBody));
} else {
popup(new MessageOk("", iTitle, new MessageResponseListener() {
public void responseMessage(Message iMessage, Object iResponse) {
iListener.onAccept();
}
}, iBody));
}
}
public void confirm(String iTitle, String iBody, final ConfirmListener iListener) {
if (iListener == null) {
popup(new MessageYesNo("", iTitle, null, iBody));
} else {
popup(new MessageYesNo("", iTitle, new MessageResponseListener() {
public void responseMessage(Message iMessage, Object iResponse) {
iListener.onResponse(Boolean.TRUE.equals(iResponse));
}
}, iBody));
}
}
}