/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.runtime.spi;
import org.eclipse.osgi.util.NLS;
import org.teiid.designer.Messages;
/**
* The <code>ExecutionConfigurationEvent</code> class is the event that is broadcast from the {@link TeiidServerManager server manager}
* when a server or connector is added, removed, or changed, or when a server is refreshed.
*
* @since 8.0
*/
public final class ExecutionConfigurationEvent {
public static ExecutionConfigurationEvent createAddDataSourceEvent( ITeiidDataSource dataSource ) {
return new ExecutionConfigurationEvent(EventType.ADD, TargetType.DATA_SOURCE, dataSource);
}
public static ExecutionConfigurationEvent createAddServerEvent( ITeiidServer teiidServer ) {
return new ExecutionConfigurationEvent(EventType.ADD, TargetType.SERVER, teiidServer);
}
public static ExecutionConfigurationEvent createDeployVDBEvent( String vdbName ) {
return new ExecutionConfigurationEvent(EventType.ADD, TargetType.VDB, vdbName);
}
public static ExecutionConfigurationEvent createRemoveDataSourceEvent( ITeiidDataSource dataSource ) {
return new ExecutionConfigurationEvent(EventType.REMOVE, TargetType.DATA_SOURCE, dataSource);
}
public static ExecutionConfigurationEvent createRemoveServerEvent( ITeiidServer teiidServer ) {
return new ExecutionConfigurationEvent(EventType.REMOVE, TargetType.SERVER, teiidServer);
}
public static ExecutionConfigurationEvent createServerRefreshEvent( ITeiidServer teiidServer ) {
return new ExecutionConfigurationEvent(EventType.REFRESH, TargetType.SERVER, teiidServer);
}
public static ExecutionConfigurationEvent createServerConnectingEvent( ITeiidServer teiidServer ) {
return new ExecutionConfigurationEvent(EventType.CONNECTING, TargetType.SERVER, teiidServer);
}
public static ExecutionConfigurationEvent createServerConnectedEvent( ITeiidServer teiidServer ) {
return new ExecutionConfigurationEvent(EventType.CONNECTED, TargetType.SERVER, teiidServer);
}
public static ExecutionConfigurationEvent createSetDefaultServerEvent( ITeiidServer oldDefaultServer,
ITeiidServer newDefaultServer ) {
return new ExecutionConfigurationEvent(EventType.DEFAULT, TargetType.SERVER, oldDefaultServer, newDefaultServer);
}
public static ExecutionConfigurationEvent createUnDeployVDBEvent( String vdbName ) {
return new ExecutionConfigurationEvent(EventType.REMOVE, TargetType.VDB, vdbName);
}
public static ExecutionConfigurationEvent createUpdateDataSourceEvent( ITeiidDataSource dataSource ) {
return new ExecutionConfigurationEvent(EventType.UPDATE, TargetType.DATA_SOURCE, dataSource);
}
public static ExecutionConfigurationEvent createUpdateServerEvent( ITeiidServer teiidServer,
ITeiidServer updatedServer ) {
return new ExecutionConfigurationEvent(EventType.UPDATE, TargetType.SERVER, teiidServer, updatedServer);
}
private final EventType eventType;
private final TargetType targetType;
private final Object target;
private final Object updatedTarget;
private ExecutionConfigurationEvent( EventType eventType,
TargetType targetType,
Object target ) {
this(eventType, targetType, target, null);
if (target == null) {
throw new IllegalArgumentException(NLS.bind(Messages.valueCannotBeNull, "target")); //$NON-NLS-1$
}
}
private ExecutionConfigurationEvent( EventType eventType,
TargetType targetType,
Object target,
Object updatedTarget ) {
assert (eventType != null);
assert (targetType != null);
this.eventType = eventType;
this.targetType = targetType;
this.target = target;
this.updatedTarget = updatedTarget;
}
/**
* Create a refresh event.
*
* @param targetType the target type that was refreshed
*/
private ExecutionConfigurationEvent( TargetType targetType ) {
this(EventType.REFRESH, targetType, null, null);
}
/**
* @return the connector involved in the event
* @throws IllegalStateException if method is called for a server event
*/
public ITeiidDataSource getDataSource() {
if (this.targetType != TargetType.DATA_SOURCE) {
throw new IllegalStateException(NLS.bind(Messages.invalidTargetTypeForGetDataSourceMethod,
this.targetType,
TargetType.DATA_SOURCE));
}
return (ITeiidDataSource)this.target;
}
/**
* @return the event type (never <code>null</code>)
*/
public EventType getEventType() {
return this.eventType;
}
/**
* When changing the default teiid instance, this returns the old default teiid instance.
*
* @return the server involved in the event (may be <code>null</code>)
* @throws IllegalStateException if method is called for a connector event
*/
public ITeiidServer getServer() {
if (this.targetType != TargetType.SERVER) {
throw new IllegalStateException(NLS.bind(Messages.invalidTargetTypeForGetServerMethod,
this.targetType,
TargetType.SERVER));
}
return (ITeiidServer)this.target;
}
/**
* @return the target type (never <code>null</code>)
*/
public TargetType getTargetType() {
return this.targetType;
}
/**
* @return the connector involved in the event
* @throws IllegalStateException if method is called for a server event
*/
public ITeiidTranslator getTranslator() {
if (this.targetType != TargetType.TRANSLATOR) {
throw new IllegalStateException(NLS.bind(Messages.invalidTargetTypeForGetTranslatorMethod,
this.targetType,
TargetType.TRANSLATOR));
}
return (ITeiidTranslator)this.target;
}
/**
* When changing the default teiid instance, this returns the new default teiid instance.
*
* @return the updated server involved in the event (may be <code>null</code>)
* @throws IllegalStateException if method is called for a connector event
*/
public ITeiidServer getUpdatedServer() {
if (this.targetType != TargetType.SERVER) {
throw new IllegalStateException(NLS.bind(Messages.invalidTargetTypeForGetUpdatedServerMethod,
this.targetType,
TargetType.SERVER));
}
return (ITeiidServer)this.updatedTarget;
}
public enum EventType {
ADD,
CONNECTING,
CONNECTED,
REFRESH,
REMOVE,
UPDATE,
DEFAULT;
}
public enum TargetType {
TRANSLATOR,
DATA_SOURCE,
SERVER,
VDB,
SOURCE_BINDING;
}
}