Skip to content

Commit

Permalink
改进schemaset
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Zhou committed Feb 12, 2013
1 parent 09979f0 commit 68d9f47
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
public class SpringExtSchemaSet extends SchemaSet {
private NamespaceItem[] allItems;
private NamespaceItem[] treeItems;
private boolean includingAllContributions;
private NamespaceItem[] treeItemsWithAllContributions;

/** 通过默认的<code>ClassLoader</code>来装载schemas。 */
public SpringExtSchemaSet() {
Expand Down Expand Up @@ -176,17 +176,26 @@ public NamespaceItem[] getIndependentItems() {
/** 取得所有独立的schemas。 */
public NamespaceItem[] getIndependentItems(boolean includingAllContributions) {
ensureTreeBuilt(includingAllContributions);
return treeItems;
return includingAllContributions ? treeItemsWithAllContributions : treeItems;
}

private synchronized void ensureTreeBuilt(boolean includingAllContributions) {
if (allItems == null || treeItems == null || includingAllContributions != this.includingAllContributions) {
this.includingAllContributions = includingAllContributions;
if (allItems == null || (includingAllContributions ? treeItemsWithAllContributions : treeItems) == null) {
TreeBuilder builder = new TreeBuilder().build(includingAllContributions);

TreeBuilder builder = new TreeBuilder().build();
if (allItems == null) {
allItems = builder.getAllNamespaceItems();
}

this.allItems = builder.getAllNamespaceItems();
this.treeItems = builder.getIndependentNamespaceItems();
if (includingAllContributions) {
if (treeItemsWithAllContributions == null) {
this.treeItemsWithAllContributions = builder.getIndependentNamespaceItems();
}
} else {
if (treeItems == null) {
this.treeItems = builder.getIndependentNamespaceItems();
}
}
}
}

Expand Down Expand Up @@ -329,8 +338,11 @@ private class TreeBuilder {
private final Map<String, NamespaceItem> items = createTreeMap();
private final Map<String, NamespaceItem> independentItems = createTreeMap();
private final LinkedList<String> buildingNamespaces = createLinkedList();
private boolean includingAllContributions;

public TreeBuilder build(boolean includingAllContributions) {
this.includingAllContributions = includingAllContributions;

public TreeBuilder build() {
for (String namespace : namespaceMappings.keySet()) {
buildNamespaceItemRecursively(namespace);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,21 @@ public void test14_configurationPointItems_includingAllContributions() {
"}", configurationPointItems.get(2).dump());
}

@Test
public void test14_with_or_without_allContributions() {
NamespaceItem[] itemsAll = schemas.getAllItems();
NamespaceItem[] items = schemas.getIndependentItems();
NamespaceItem[] itemsWithAllContributions = schemas.getIndependentItems(true);

// 多次调用值不变
assertSame(items, schemas.getIndependentItems());
assertSame(items, schemas.getIndependentItems(false));

assertSame(itemsWithAllContributions, schemas.getIndependentItems(true));

assertSame(itemsAll, schemas.getAllItems());
}

@Test
public void test14_springItems() {
boolean found = false;
Expand Down

0 comments on commit 68d9f47

Please sign in to comment.