blob: fbda7227fe7eefbf67538e40e7a2448ced044356 [file] [log] [blame]
/*
* Copyright 2015 Open Networking Laboratory
*
* 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.onosproject.incubator.net.config;
/**
* Base abstract factory for creating configurations for the specified subject type.
*
* @param <S> subject class
*/
public abstract class ConfigFactory<S> {
private final Class<S> subjectClass;
private final String key;
/**
* Creates a new configuration factory for the specified class of subjects
* and bound to the given subject configuration key.
*
* @param subjectClass subject class
* @param key subject configuration key
*/
protected ConfigFactory(Class<S> subjectClass, String key) {
this.subjectClass = subjectClass;
this.key = key;
}
/**
* Returns the class of the subject to which this factory applies.
*
* @return subject type
*/
public Class<S> subjectClass() {
return subjectClass;
}
/**
* Returns the key to which produced configurations should be bound.
*
* @return subject configuration key
*/
public String key() {
return key;
}
/**
* Creates a new but uninitialized configuration. Framework will initialize
* the configuration via {@link Config#init} method.
*
* @return new uninitialized configuration
*/
public abstract Config<S> createConfig();
}