/*******************************************************************************
 * Copyright (c) 2011, 2012 Oracle. 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:
 *     Oracle - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.jaxb.core.internal.resource.jaxbindex;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Vector;
import org.eclipse.core.resources.IFile;
import org.eclipse.jpt.common.core.JptResourceType;
import org.eclipse.jpt.common.utility.internal.Transformer;
import org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable;
import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable;
import org.eclipse.jpt.jaxb.core.JptJaxbCorePlugin;
import org.eclipse.jpt.jaxb.core.internal.resource.AbstractJaxbFileResourceModel;
import org.eclipse.jpt.jaxb.core.resource.jaxbindex.JaxbIndexResource;

/**
 * JAXB index
 */
public class JaxbIndexResourceImpl
	extends AbstractJaxbFileResourceModel<Vector<String>>
	implements JaxbIndexResource
{
	public JaxbIndexResourceImpl(IFile file) {
		super(file);
	}

	@Override
	protected Vector<String> buildState() {
		return new Vector<String>();
	}

	@Override
	protected void reload() {
		this.state.clear();
		super.reload();
	}

	@Override
	protected void load(InputStream stream) throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
		String line = reader.readLine();
		while (line != null) {
			this.state.add(line.trim());
			line = reader.readLine();
		}
	}

	public Iterable<String> getFullyQualifiedClassNames() {
		return (this.packageName == null) ?
				this.getSimpleClassNames() :
				this.getPrefixedClassNames();
	}

	protected Iterable<String> getSimpleClassNames() {
		return new SnapshotCloneIterable<String>(this.state);
	}

	protected Iterable<String> getPrefixedClassNames() {
		return new TransformationIterable<String, String>(
					this.getSimpleClassNames(),
					new PrefixTransformer(this.packageName + '.')
				);
	}

	protected class PrefixTransformer
		implements Transformer<String, String>
	{
		protected final String prefix;
		protected PrefixTransformer(String prefix) {
			super();
			this.prefix = prefix;
		}
		public String transform(String string) {
			return this.prefix + string;
		}
	}

	public JptResourceType getResourceType() {
		return JptJaxbCorePlugin.JAXB_INDEX_RESOURCE_TYPE;
	}
}
