ImportData.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ostrichemulators.semtool.poi.main;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;

/**
 *
 * @author ryan
 */
public final class ImportData {
	private static final Logger log = Logger.getLogger( ImportData.class );
	private final List<LoadingSheetData> sheets = new ArrayList<>();
	private ImportMetadata metadata;

	public ImportData() {
		this( new ImportMetadata() );
	}

	public ImportData( ImportMetadata md ) {
		setMetadata( md );
	}

	/**
	 * Releases any resources used by this object
	 */
	public void release() {
		for ( LoadingSheetData lsd : sheets ) {
			lsd.release();
		}

		sheets.clear();
		metadata.clear();
	}

	public ImportData add( LoadingSheetData d ) {
		sheets.add( d );
		return this;
	}

	public ImportData add( Collection<LoadingSheetData> newsheets,
			Collection<String[]> stmts ) {

		sheets.addAll( newsheets );
		metadata.addAll( stmts );

		return this;
	}

	public final ImportData setMetadata( ImportMetadata im ) {
		metadata = im;
		return this;
	}

	public ImportMetadata getMetadata() {
		return metadata;
	}

	public Collection<LoadingSheetData> getRels() {
		List<LoadingSheetData> rels = new ArrayList<>();
		for ( LoadingSheetData d : sheets ) {
			if ( d.isRel() ) {
				rels.add( d );
			}
		}
		return rels;
	}

	public Collection<LoadingSheetData> getNodes() {
		List<LoadingSheetData> nodes = new ArrayList<>();
		for ( LoadingSheetData d : sheets ) {
			if ( !d.isRel() ) {
				nodes.add( d );
			}
		}
		return nodes;
	}

	/**
	 * Gets all node and relationship loading data
	 *
	 * @return
	 */
	public Collection<LoadingSheetData> getSheets() {
		return new ArrayList<>( sheets );
	}

	public Collection<String[]> getStatements() {
		return metadata.getStatements();
	}

	/**
	 * Are there any nodes or relationships in this instance?
	 *
	 * @return true if getSheets returns an empty collection
	 */
	public boolean isEmpty() {
		return sheets.isEmpty();
	}

	public List<String> getSheetNames() {
		List<String> names = new ArrayList<>();
		for ( LoadingSheetData lsd : sheets ) {
			names.add( lsd.getName() );
		}

		return names;
	}

	public LoadingSheetData getSheet( String name ) {
		for ( LoadingSheetData lsd : sheets ) {
			if ( lsd.getName().equals( name ) ) {
				return lsd;
			}
		}

		return null;
	}

	/**
	 * Looks through all properties for each sheet to see if the property is
	 * actually a link to a node in some other sheet
	 *
	 * @see LoadingSheetData#findPropertyLinks(java.util.Collection)
	 */
	public void findPropertyLinks() {
		for ( LoadingSheetData sheet : sheets ) {
			if ( sheet.hasProperties() ) {
				Set<LoadingSheetData> sheetset = new HashSet<>( sheets );
				sheetset.remove( sheet ); // don't look at ourselves
				sheet.findPropertyLinks( sheetset );
			}
		}
		log.debug( "property links resolved" );
	}
}