/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* 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 eu.stratosphere.nephele.instance;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* This factory constructs {@link InstanceType} objects.
*
*/
public class InstanceTypeFactory {
/**
* The logger used to report errors.
*/
private static final Log LOG = LogFactory.getLog(InstanceTypeFactory.class);
/**
* The pattern used to parse the hardware descriptions of instance types.
*/
private static Pattern INSTANCE_TYPE_PATTERN = Pattern.compile("^([^,]+),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)$");
/**
* Private constructor, so class cannot be instantiated.
*/
private InstanceTypeFactory() {
}
/**
* Constructs an {@link InstanceType} object by parsing a hardware description string.
*
* @param description
* the hardware description reflected by this instance type
* @return an instance type reflecting the given hardware description or <code>null</code> if the description cannot
* be parsed
*/
public static InstanceType constructFromDescription(String description) {
final Matcher m = INSTANCE_TYPE_PATTERN.matcher(description);
if (!m.matches()) {
LOG.error("Cannot extract instance type from string " + description);
return null;
}
final String identifier = m.group(1);
final int numComputeUnits = Integer.parseInt(m.group(2));
final int numCores = Integer.parseInt(m.group(3));
final int memorySize = Integer.parseInt(m.group(4));
final int diskCapacity = Integer.parseInt(m.group(5));
final int pricePerHour = Integer.parseInt(m.group(6));
return new InstanceType(identifier, numComputeUnits, numCores, memorySize, diskCapacity, pricePerHour);
}
/**
* Constructs an {@link InstanceType} from the given parameters.
*
* @param identifier
* identifier for this instance type
* @param numberOfComputeUnits
* number of computational units of this instance type
* @param numberOfCores
* number of CPU cores of this instance type
* @param memorySize
* amount of main memory of this instance type (in MB)
* @param diskCapacity
* disk capacity of this instance type (in GB)
* @param pricePerHour
* price per hour that is charged for running instances of this type
*/
public static InstanceType construct(String identifier, int numberOfComputeUnits, int numberOfCores,
int memorySize, int diskCapacity, int pricePerHour) {
return new InstanceType(identifier, numberOfComputeUnits, numberOfCores, memorySize, diskCapacity, pricePerHour);
}
}