/*******************************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - Initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.server.ui.internal.wizard;

import org.eclipse.wst.server.core.TaskModel;
import org.eclipse.wst.server.ui.wizard.WizardFragment;
/**
 * 
 */
public class InputWizardFragment extends WizardFragment {
	protected String[] ids;
	protected Object[] values;
	
	public InputWizardFragment(String id, Object value) {
		this(new String[] { id }, new Object[] { value });
	}

	public InputWizardFragment(String[] ids, Object[] values) {
		this.ids = ids;
		this.values = values;
	}
	
	/*public void enter() {
		int size = ids.length;
		for (int i = 0; i < size; i++)
			getTaskModel().putObject(ids[i], values[i]);
	}*/
	
	public void setTaskModel(TaskModel taskModel) {
		super.setTaskModel(taskModel);
		if (taskModel == null)
			return;
		
		int size = ids.length;
		for (int i = 0; i < size; i++)
			taskModel.putObject(ids[i], values[i]);
	}
}