blob: e39faed33c77bc46b247b3835ef4b1849165c293 [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 flex.messaging;
import flex.messaging.config.ConfigMap;
import flex.messaging.config.ConfigurationException;
/**
* This class is used by the FlexFactory to store the configuration
* for an instance created by the factory. There is one of these for
* each destination currently since only destinations create these components.
*
* @see flex.messaging.FlexFactory
*/
public class FactoryInstance
{
private static final int INVALID_SCOPE = 10653;
private FlexFactory factory;
private String id;
private String scope = FlexFactory.SCOPE_REQUEST;
private String source;
private ConfigMap properties;
/**
* Normally FactoryInstances are constructed by Data Services during startup so you
* do not need to use this method. It is typically called from the
* FlexFactory.createFactoryInstance method as Data Services is parsing
* the destination configuration information for a given destination.
* You can override this method to extract additional configuration for
* your component from the properties argument.
*
* @param factory the FlexFactory this FactoryInstance is created from
* @param id the Destination's id
* @param properties the configuration properties for this destination.
*
* @see flex.messaging.config.ConfigMap
*/
public FactoryInstance(FlexFactory factory, String id, ConfigMap properties)
{
this.factory = factory;
this.id = id;
this.properties = properties;
}
/**
* Get the factory instance ID.
* @return The destination's id that this FactoryInstance is associated with.
*/
public String getId()
{
return id;
}
/**
* Since many factories may provide components in different
* scopes, this is abstracted in the base factory instance class.
* @param scope the scope
*/
public void setScope(String scope)
{
this.scope = scope;
if (!FlexFactory.SCOPE_SESSION.equals(scope)
&& !FlexFactory.SCOPE_APPLICATION.equals(scope)
&& !FlexFactory.SCOPE_REQUEST.equals(scope))
{
// Invalid scope setting for RemotingService destination '{id}'.
// Valid options are 'request', 'session', or 'application'.
ConfigurationException ex = new ConfigurationException();
ex.setMessage(INVALID_SCOPE, new Object[] {id, "\'request\', \'session\', or \'application\'"});
throw ex;
}
}
/**
* Get the scope.
* @return String the scope
*/
public String getScope()
{
return scope;
}
/**
* This is by convention the main property for the defining the
* instance we create with this factory. It may be the class name
* for the JavaFactory or the id for a factory that uses ids.
*
* @param source source
*/
public void setSource(String source)
{
this.source = source;
}
/**
* Get the source.
* @return String the source string
*/
public String getSource()
{
return source;
}
/**
* If possible, returns the class for the underlying configuration.
* This method can return null if the class is not known until the lookup
* method is called. The goal is so the factories which know the class
* at startup time can provide earlier error detection. If the class is not
* known, this method can return null and validation will wait until the
* first lookup call.
*
* @return the class for this configured instance or null if the class
* is not known until lookup time.
*/
public Class getInstanceClass()
{
return null;
}
/**
* Returns the ConfigMap that this factory instance was created with. You can
* use this ConfigMap to retrieve additional properties which this factory
* instance is configured with. For example, if you are defining a remote object
* destination, your FactoryInstance can be configured with additional XML tags
* underneath the properties tag for your destination. It is important that
* if you expect additional properties that you access in the ConfigMap or call
* allowProperty on that property when the FactoryInstance is created. Otherwise,
* these properties can generate warnings about "unexpected" configuration.
* @return ConfigMap the ConfigMap that this factory was created with
* @see flex.messaging.config.ConfigMap
*/
public ConfigMap getProperties()
{
return properties;
}
/**
* Return an instance as appropriate for this instance of the given
* factory. This just calls the lookup method on the factory that this
* instance was created on. You override this method to return the
* specific component for this destination.
* @return Object the object lookup
*/
public Object lookup()
{
return factory.lookup(this);
}
/**
* When the caller is done with the instance, this method is called. For
* session scoped components, this gives you the opportunity to update
* any state modified in the instance in a remote persistence store.
* This method is not called when the object should be destroyed.
* To get a destroy notification, you should register for the appropriate
* events via the FlexContext.
*
* @param instance the instance returned via the lookup method for this
* destination for this operation.
*/
public void operationComplete(Object instance)
{
}
}