ruper2/src/java/core/org/krysalis/ruper/query DefaultQueryEngine.java,NONE,1.1 ResourceSpecifierRequest.java,NONE,1.1 ResourceQuery.java,1.2,1.3 ResourceResult.java,1.4,1.5 ResourceRequest.java,1.6,1.7 ResourceRequestContext.java,1.3,NONE

[email protected]
Newsgroups gmane.comp.krysalis.metamorphosis.cvs
Message-ID <[email protected]>
Update of /cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper/query
In directory sc8-pr-cvs1:/tmp/cvs-serv5134/src/java/core/org/krysalis/ruper/query

Modified Files:
	ResourceResult.java ResourceRequest.java 
Added Files:
	DefaultQueryEngine.java ResourceSpecifierRequest.java 
	ResourceQuery.java 
Removed Files:
	ResourceRequestContext.java 
Log Message:
1) Finished Query & Query Engine
2) Worked on Files

--- NEW FILE: DefaultQueryEngine.java ---
/*
 * Created on Sep 8, 2003
 */
package org.krysalis.ruper.query;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

import org.krysalis.ruper.RuperException;
import org.krysalis.ruper.log.Logger;
import org.krysalis.ruper.repository.RepositoryWrapper;
import org.krysalis.ruper.resource.Resource;
import org.krysalis.ruper.resource.ResourceGroup;
import org.krysalis.ruper.resource.compare.StandardComparisons;
import org.krysalis.ruper.util.select.AllSelector;
import org.krysalis.ruper.util.select.Selector;
import org.krysalis.ruper.util.text.Messages;
import org.krysalis.version.util.debug.DebugUtils;

/**
 * @author arb_jack
 */
public class DefaultQueryEngine {

	public ResourceResult query(List wrappers, ResourceQuery query)
		throws RuperException {
			
		
		DebugUtils.dump(query);
			
			
		List results = new ArrayList();

		// Extract query components
		List resourceGroups = query.getGroups();
		Selector whereClause = query.getWhere();
		Comparator groupBy = query.getGroupBy();
		Comparator orderBy = query.getOrderBy();

		//:TODO: Total Hack, just to allow something...
		// Rework w/ correct configurable components

		for (Iterator i = wrappers.iterator(); i.hasNext();) {
			RepositoryWrapper repo = (RepositoryWrapper) i.next();
			try {
				Logger.getLog().debug(Messages.getString("Search Repo", repo));

				for (Iterator ii = resourceGroups.iterator(); ii.hasNext();) {
					ResourceGroup resourceGroup = (ResourceGroup) ii.next();

					Logger.getLog().debug(
						Messages.getString("Resource Group", resourceGroup));

					// Look...
					List resources =
						repo.listResources(
							resourceGroup,
							AllSelector.getInstance());

					if (resources.isEmpty()) {
						Logger.getLog().warn(
							Messages.getString("NO_RESOURCES_IN_REPO", repo));
					}
					else {
						//
						// Do the query
						// 
						results.addAll(resources);
					}
				}
			}
			catch (Exception e) {
				Logger.getLog().warn(Messages.getString("LIST_FAILED"), e);
			}
		}

		//
		// Package the results..
		//
		ResourceResult result = new ResourceResult();

		DebugUtils.printSeparator();
		DebugUtils.dump("All Results", results);

		if (results.isEmpty())
			Logger.getLog().warn(Messages.getString("NO_RESOURCES"));
		else
			groupBy(result, results, groupBy);

		DebugUtils.printSeparator();
		DebugUtils.dump("Grouped Results", result);

		//
		// Order the various groups
		//
		if (null == orderBy)
			orderBy = StandardComparisons.getNameTypeVersion();

		orderBy(result, orderBy);

		DebugUtils.printSeparator();
		DebugUtils.dump("Final (Grouped/Ordered) Results", result);

		return result;
	}

	//
	// Group into lists by comparator
	//
	private void groupBy(
		ResourceResult result,
		List allResults,
		Comparator groupBy) {

		if (null != groupBy) {
			SortedSet set = new TreeSet(groupBy);
			set.addAll(allResults);

			Resource currentResource = null;
			List currentList = null;
			for (Iterator i = set.iterator(); i.hasNext();) {
				Resource resource = (Resource) i.next();

				// Do we have a new group?
				if ((null == currentList)
					|| (null == currentResource)
					|| (groupBy.compare(resource, currentResource) != 0)) {
					currentList = new ArrayList();

					// Add group to results
					result.add(currentList);
				}

				// Stash this resource
				currentList.add(resource);

				// For comparing group changes..
				currentResource = resource;
			}
		}
		else {
			// A single list (one group)...
			result.add(allResults);
		}
	}

	//
	// Sort each sub-list by the order comparator
	//
	private void orderBy(ResourceResult result, Comparator orderBy) {
		if (null != orderBy)
			for (Iterator i = result.iterator(); i.hasNext();) {
				List currentList = (List) i.next();
				Collections.sort(currentList, orderBy);
			}
	}

}

--- NEW FILE: ResourceSpecifierRequest.java ---
/*
 * Created on Aug 23, 2003
 *
 */
package org.krysalis.ruper.query;

import java.util.Comparator;

import org.krysalis.ruper.repository.DefaultRepositorySet;
import org.krysalis.ruper.repository.RepositorySet;
import org.krysalis.ruper.resource.ResourceSpecifier;
import org.krysalis.ruper.resource.compare.StandardComparisons;
import org.krysalis.ruper.resource.select.StandardSelections;
import org.krysalis.ruper.util.select.Selector;

/**
 * @author anou_mana
 *
 */
public class ResourceSpecifierRequest implements ResourceRequest {

	//
	// :TODO: Nice if we could make requests referenceable
	// to allow re-use (especially for the more generic) 
	//

	private ResourceSpecifier m_specifier = null;
	private RepositorySet m_repos = null;

	public ResourceSpecifierRequest(
		RepositorySet repos,
		ResourceSpecifier specifier) {
		m_specifier = specifier;
		m_repos = repos;
	}

	public ResourceSpecifierRequest(ResourceSpecifier specifier) {
		m_specifier = specifier;
		m_repos = new DefaultRepositorySet();
	}

	public ResourceQuery getQuery() {
		Selector where = StandardSelections.getNamedTypedVersion(m_specifier);
		Comparator orderBy = StandardComparisons.getNameTypeVersion();
		Comparator groupBy = StandardComparisons.getNameVersion();

		return new ResourceQuery(
			m_specifier.getGroup(),
			m_repos,
			where,
			groupBy,
			orderBy);
	}

	/**
	 * @return
	 */
	public RepositorySet getRepos() {
		return m_repos;
	}

	/**
	 * @return
	 */
	public ResourceSpecifier getSpecifier() {
		return m_specifier;
	}

	/**
	 * @param set
	 */
	public void setRepos(RepositorySet set) {
		m_repos = set;
	}

	/**
	 * @param specifier
	 */
	public void setSpecifier(ResourceSpecifier specifier) {
		m_specifier = specifier;
	}

}


Index: ResourceResult.java
===================================================================
RCS file: /cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper/query/ResourceResult.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ResourceResult.java	5 Sep 2003 05:51:46 -0000	1.4
--- ResourceResult.java	8 Sep 2003 23:21:40 -0000	1.5
***************
*** 9,12 ****
--- 9,14 ----
   * @author arb_jack
   *
+  * A ResourceResult is a list of lists of resources.
+  *  
   */
  public class ResourceResult extends ArrayList {

Index: ResourceRequest.java
===================================================================
RCS file: /cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper/query/ResourceRequest.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** ResourceRequest.java	4 Sep 2003 19:13:01 -0000	1.6
--- ResourceRequest.java	8 Sep 2003 23:21:40 -0000	1.7
***************
*** 5,49 ****
  package org.krysalis.ruper.query;
  
- import java.util.ArrayList;
- import java.util.List;
- 
- import org.krysalis.ruper.resource.ResourceSpecifier;
- ;
  
  /**
!  * @author anou_mana
   *
   */
! public class ResourceRequest {
! 	
! 	//
! 	// :TODO: Nice if we could make queries referenceable
! 	// to allow re-use (especially for the more generic) 
! 	//
! 	
! 	private List m_specifiers = null;
! 	
! 	public ResourceRequest(ResourceSpecifier specifier)
! 	{
! 		m_specifiers = new ArrayList();
! 		m_specifiers.add(specifier);
! 	}
! 	
! 	//:TODO: Add other request stuff:
! 	//	Version
! 	//	ConstraintSet(s)
! 	
! 	/**
! 	 * @return
! 	 */
! 	public List getSpecifiers() {
! 		return m_specifiers;
! 	}
! 
! 	/**
! 	 * @param specifier
! 	 */
! 	public void addSpecifier(ResourceSpecifier specifier) {
! 		m_specifiers.add(specifier);
! 	}
  }
--- 5,14 ----
  package org.krysalis.ruper.query;
  
  
  /**
!  * @author anou_mana -- a user level request
   *
   */
! public interface ResourceRequest {
! 	ResourceQuery getQuery();
  }

--- ResourceRequestContext.java DELETED ---




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.