Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (c) 2015-2019 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* 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.
*
* Attribution Notice under the terms of the Apache License 2.0
*
* This work was created by the collective efforts of the openCypher community.
* Without limiting the terms of Section 6, any Derivative Work that is not
* approved by the public consensus process of the openCypher Implementers Group
* should not be described as “Cypher” (and Cypher® is a registered trademark of
* Neo4j Inc.) or as "openCypher". Extensions by implementers or prototypes or
* proposals for change that have been documented or implemented should only be
* described as "implementation extensions to Cypher" or as "proposed changes to
* Cypher that are not yet approved by the openCypher community".
*/
package org.opencypher.tools.xml;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;
import org.opencypher.tools.Reflection;
import static java.util.Collections.singletonList;
class Structure
{
public static Structure tree( Class> root )
{
return new Lookup().get( root );
}
private final Lookup lookup;
private final Class> type;
private final Element element;
private final Map, Constructor>> constructors;
private final AttributeHandler[] attributes;
private final CharactersHandler characters, comments, headers;
private final List nested;
private NodeBuilder[] children;
private Structure( Lookup lookup, Class> type, Element element, Map, Constructor>> constructors,
List children, List attributes )
{
this.lookup = lookup;
this.type = type;
this.element = element;
this.constructors = constructors;
this.attributes = new AttributeHandler[attributes.size()];
for ( int i = 0; i < this.attributes.length; i++ )
{
this.attributes[i] = attributes.get( i ).handler( element.uri() );
}
Map, CharactersHandler> characters = null;
this.nested = new ArrayList<>( children.size() );
for ( Nested child : children )
{
if ( child instanceof NestedText )
{
if ( characters == null )
{
characters = new HashMap<>();
}
NestedText text = (NestedText) child;
if ( null != characters.put( text.type, text.handler ) )
{
throw new IllegalStateException(
"Multiple text handling methods for type " + text.type.getSimpleName() );
}
}
else
{
this.nested.add( (NestedChild) child );
}
}
this.characters = textHandler( String.class, characters );
this.comments = textHandler( Comment.class, characters );
this.headers = textHandler( Comment.Header.class, characters );
}
public NodeBuilder factory( Class> parent, BiConsumer