org.apache.xmlbeans.impl.schema.SchemaDependencies Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of commons-xmlbeans Show documentation
Show all versions of commons-xmlbeans Show documentation
The Apache Commons Codec package contains simple encoder and decoders for
various formats such as Base64 and Hexadecimal. In addition to these
widely used encoders and decoders, the codec package also maintains a
collection of phonetic encoding utilities.
The newest version!
/* Copyright 2004 The Apache Software Foundation
*
* 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.
*/
package org.apache.xmlbeans.impl.schema;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class SchemaDependencies
{
// This class is NOT synchronized
void registerDependency(String source, String target)
{
Set depSet = (Set) _dependencies.get(target);
if (depSet == null)
{
depSet = new HashSet();
_dependencies.put(target, depSet);
}
depSet.add(source);
}
/**
* Records anti-dependencies. Keys are namespaces and values are
* the lists of namespaces that depend on each key
*/
private Map/*>*/ _dependencies;
Set computeTransitiveClosure(List modifiedNamespaces)
{
List nsList = new ArrayList(modifiedNamespaces);
Set result = new HashSet(modifiedNamespaces);
for (int i = 0; i < nsList.size(); i++)
{
Set deps = (Set) _dependencies.get(nsList.get(i));
if (deps == null)
continue;
for (Iterator it = deps.iterator(); it.hasNext(); )
{
String ns = (String) it.next();
if (!result.contains(ns))
{
nsList.add(ns);
result.add(ns);
}
}
}
return result;
}
SchemaDependencies()
{
_dependencies = new HashMap();
_contributions = new HashMap();
}
SchemaDependencies(SchemaDependencies base, Set updatedNs)
{
_dependencies = new HashMap();
_contributions = new HashMap();
for (Iterator it = base._dependencies.keySet().iterator(); it.hasNext(); )
{
String target = (String) it.next();
if (updatedNs.contains(target))
continue;
Set depSet = new HashSet();
_dependencies.put(target, depSet);
Set baseDepSet = (Set) base._dependencies.get(target);
for (Iterator it2 = baseDepSet.iterator(); it2.hasNext(); )
{
String source = (String) it2.next();
if (updatedNs.contains(source))
continue;
depSet.add(source);
}
}
for (Iterator it = base._contributions.keySet().iterator(); it.hasNext(); )
{
String ns = (String) it.next();
if (updatedNs.contains(ns))
continue;
List fileList = new ArrayList();
_contributions.put(ns, fileList);
List baseFileList = (List) base._contributions.get(ns);
for (Iterator it2 = baseFileList.iterator(); it2.hasNext(); )
fileList.add(it2.next());
}
}
/**
* Records the list of files associated to each namespace.
* This is needed so that we can return a list of files that
* need to be compiled once we get a set of altered namespaces
*/
private Map/*>*/ _contributions;
void registerContribution(String ns, String fileURL)
{
List fileList = (List) _contributions.get(ns);
if (fileList == null)
{
fileList = new ArrayList();
_contributions.put(ns, fileList);
}
fileList.add(fileURL);
}
boolean isFileRepresented(String fileURL)
{
for (Iterator it = _contributions.values().iterator(); it.hasNext(); )
{
List fileList = (List) it.next();
if (fileList.contains(fileURL))
return true;
}
return false;
}
List getFilesTouched(Set updatedNs)
{
List result = new ArrayList();
for (Iterator it = updatedNs.iterator(); it.hasNext(); )
{
result.addAll((List) _contributions.get(it.next()));
}
return result;
}
List getNamespacesTouched(Set modifiedFiles)
{
List result = new ArrayList();
for (Iterator it = _contributions.keySet().iterator(); it.hasNext(); )
{
String ns = (String) it.next();
List files = (List) _contributions.get(ns);
for (int i = 0; i < files.size(); i++)
if (modifiedFiles.contains(files.get(i)))
result.add(ns);
}
return result;
}
}