/*******************************************************************************
 * Mission Control Technologies, Copyright (c) 2009-2012, United States Government
 * as represented by the Administrator of the National Aeronautics and Space 
 * Administration. All rights reserved.
 *
 * The MCT platform is 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.
 *
 * MCT includes source code licensed under additional open source licenses. See 
 * the MCT Open Source Licenses file included with this distribution or the About 
 * MCT Licenses dialog available at runtime from the MCT Help menu for additional 
 * information. 
 *******************************************************************************/
package gov.nasa.arc.mct.scenario.component;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

public class ActivityTypeComponent extends CostFunctionComponent {
	private AtomicReference<ActivityTypeModel> activityModel =
			new AtomicReference<ActivityTypeModel>(new ActivityTypeModel());
	private List<CostFunctionCapability> internalCostFunctions = 
			Arrays.<CostFunctionCapability>asList(new ActivityTypeCost(false), new ActivityTypeCost(true));
	
	
	
	@Override
	public List<CostFunctionCapability> getInternalCostFunctions() {
		return internalCostFunctions;
	}



	private class ActivityTypeCost implements CostFunctionCapability {
		private boolean isComm;
		
		public ActivityTypeCost(boolean isComm) {
			this.isComm = isComm;
		}
		
		@Override
		public String getName() {
			return isComm ? "Comms" : "Power";
		}

		@Override
		public String getUnits() {
			return isComm ? "KB/s" : "Watts";
		}

		@Override
		public double getValue(long time) {
			ActivityTypeModel model = activityModel.get();
			return isComm ? model.getComms() : model.getPower();			
		}

		@Override
		public Collection<Long> getChangeTimes() {
			return Collections.emptyList();
		}
		
	}
}

@@ -1249,16 +1249,137 @@
 onent;%0A%0A
+import gov.nasa.arc.mct.components.JAXBModelStatePersistence;%0Aimport gov.nasa.arc.mct.components.ModelStatePersistence;%0A%0A
 import j
@@ -1645,23 +1645,16 @@
 el%3E 
-activityM
+m
 odel =
+ 
 %0A%09%09%09
@@ -1819,15 +1819,22 @@
 ity%3E
+ 
 asList(
+%0A%09%09%09%09%09
 new 
@@ -1857,17 +1857,22 @@
 (false),
- 
+%0A%09%09%09%09%09
 new Acti
@@ -1892,21 +1892,16 @@
 true));%0A
-%09%0A%09%0A%09
 %0A%09@Overr
@@ -2006,16 +2006,671 @@
 ns;%0A%09%7D%0A%0A
+%09@Override%0A%09public %3CT%3E T handleGetCapability(Class%3CT%3E capability) %7B%0A%09%09if (capability.isAssignableFrom(ModelStatePersistence.class)) %7B%0A%09%09%09JAXBModelStatePersistence%3CActivityTypeModel%3E persistence = %0A%09%09%09%09%09new JAXBModelStatePersistence%3CActivityTypeModel%3E() %7B%0A%09%09%09%09@Override%0A%09%09%09%09protected ActivityTypeModel getStateToPersist() %7B%0A%09%09%09%09%09return model.get();%0A%09%09%09%09%7D%0A%0A%09%09%09%09@Override%0A%09%09%09%09protected void setPersistentState(ActivityTypeModel modelState) %7B%0A%09%09%09%09%09model.set(modelState);%0A%09%09%09%09%7D%0A%0A%09%09%09%09@Override%0A%09%09%09%09protected Class%3CActivityTypeModel%3E getJAXBClass() %7B%0A%09%09%09%09%09return ActivityTypeModel.class;%0A%09%09%09%09%7D%0A%09%09%09%7D;%0A%0A%09%09%09return capability.cast(persistence);%0A%09%09%7D%0A%09%09return null;%0A%09%7D
 %0A%0A%09priva
@@ -2757,18 +2757,16 @@
 isComm;%0A
-%09%09
 %0A%09%09publi
@@ -2831,18 +2831,16 @@
 mm;%0A%09%09%7D%0A
-%09%09
 %0A%09%09@Over
@@ -3074,24 +3074,12 @@
 el m
-odel = activityM
+ = m
 odel
@@ -3106,20 +3106,16 @@
 Comm ? m
-odel
 .getComm
@@ -3121,20 +3121,16 @@
 ms() : m
-odel
 .getPowe
@@ -3133,19 +3133,16 @@
 Power();
-%09%09%09
 %0A%09%09%7D%0A%0A%09%09
@@ -3235,16 +3235,14 @@
 ();%0A%09%09%7D%0A
-%09%09
 %0A%09%7D%0A%7D%0A

Support persistence of Activity Type