IBaseWeb.java
- /*
- * @cond LICENSE
- * ######################################################################################
- * # LGPL License #
- * # #
- * # This file is part of the LightJason AgentSpeak(L++) #
- * # Copyright (c) 2015-19, LightJason (info@lightjason.org) #
- * # This program is free software: you can redistribute it and/or modify #
- * # it under the terms of the GNU Lesser General Public License as #
- * # published by the Free Software Foundation, either version 3 of the #
- * # License, or (at your option) any later version. #
- * # #
- * # This program is distributed in the hope that it will be useful, #
- * # but WITHOUT ANY WARRANTY; without even the implied warranty of #
- * # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
- * # GNU Lesser General Public License for more details. #
- * # #
- * # You should have received a copy of the GNU Lesser General Public License #
- * # along with this program. If not, see http://www.gnu.org/licenses/ #
- * ######################################################################################
- * @endcond
- */
- package org.lightjason.agentspeak.action.builtin.web;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.client.methods.HttpRequestBase;
- import org.apache.http.impl.client.HttpClientBuilder;
- import org.apache.http.util.EntityUtils;
- import org.lightjason.agentspeak.action.builtin.IBuiltinAction;
- import org.lightjason.agentspeak.action.builtin.web.rest.IBaseRest;
- import org.lightjason.agentspeak.common.CCommon;
- import org.lightjason.agentspeak.language.CLiteral;
- import org.lightjason.agentspeak.language.CRawTerm;
- import org.lightjason.agentspeak.language.ILiteral;
- import org.lightjason.agentspeak.language.ITerm;
- import javax.annotation.Nonnull;
- import javax.annotation.Nullable;
- import java.io.IOException;
- import java.util.Collection;
- import java.util.Map;
- import java.util.Objects;
- import java.util.Stack;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- /**
- * web base action class
- */
- public abstract class IBaseWeb extends IBuiltinAction
- {
- /**
- * serial id
- */
- private static final long serialVersionUID = 4839156213009145751L;
- /**
- * ctor
- *
- * @param p_length length
- */
- protected IBaseWeb( final int p_length )
- {
- super( p_length );
- }
- /**
- * returns a http-post connection
- *
- * @param p_url url
- * @return request
- */
- protected static HttpPost httppost( @Nonnull final String p_url )
- {
- return header( new HttpPost( p_url ) );
- }
- /**
- * returns a http-get connection
- *
- * @param p_url url
- * @return request
- */
- protected static HttpGet httpget( @Nonnull final String p_url )
- {
- return header( new HttpGet( p_url ) );
- }
- /**
- * sets the default header definition
- *
- * @param p_request request
- * @tparam T request type
- * @return input request
- */
- private static <T extends HttpRequestBase> T header( @Nonnull final T p_request )
- {
- p_request.setHeader(
- "User-Agent",
- ( Objects.isNull( System.getProperty( "http.agent" ) ) ) || ( System.getProperty( "http.agent" ).isEmpty() )
- ? CCommon.PACKAGEROOT + CCommon.configuration().getString( "version" )
- : System.getProperty( "http.agent" )
- );
- return p_request;
- }
- /**
- * execute http-get request
- *
- * @param p_url url
- * @return url data
- *
- * @throws IOException is thrown on connection errors
- */
- @Nonnull
- protected static String httpgetexecute( @Nonnull final String p_url ) throws IOException
- {
- return EntityUtils.toString( HttpClientBuilder.create().build().execute( httpget( p_url ) ).getEntity() );
- }
- /**
- * execute http-get request
- *
- * @param p_get get request
- * @return output data as string
- * @throws IOException is thrown on connection errors
- */
- protected static String httpgetexecute( @Nonnull final HttpGet p_get ) throws IOException
- {
- return EntityUtils.toString( HttpClientBuilder.create().build().execute( p_get ).getEntity() );
- }
- /**
- * execute http-post request
- *
- * @param p_post post request
- * @return output data as string
- * @throws IOException is thrown on connection errors
- */
- protected static String httppostexecute( @Nonnull final HttpPost p_post ) throws IOException
- {
- return EntityUtils.toString( HttpClientBuilder.create().build().execute( p_post ).getEntity() );
- }
- /**
- * creates a literal structure from a stream of string elements,
- * the string stream will be build in a tree structure
- *
- * @param p_functor stream with functor strings
- * @param p_values value stream
- * @return term
- */
- @Nonnull
- protected static ITerm baseliteral( @Nonnull final Stream<String> p_functor, @Nonnull final Stream<ITerm> p_values )
- {
- final Stack<String> l_tree = p_functor.collect( Collectors.toCollection( Stack::new ) );
- ILiteral l_literal = CLiteral.from( l_tree.pop(), p_values );
- while ( !l_tree.isEmpty() )
- l_literal = CLiteral.from( l_tree.pop(), l_literal );
- return l_literal;
- }
- /**
- * converts an object into a term stream
- *
- * @param p_object object
- * @return term stream
- */
- @Nonnull
- @SuppressWarnings( "unchecked" )
- protected static Stream<ITerm> flatterm( @Nullable final Object p_object )
- {
- if ( ( Objects.isNull( p_object ) ) || ( ( p_object instanceof Map ) && ( ( (Map<String, ?>) p_object ).isEmpty() ) ) )
- return Stream.empty();
- return p_object instanceof Map
- ? flatmap( (Map<String, ?>) p_object )
- : p_object instanceof Collection
- ? flatcollection( (Collection) p_object )
- : Stream.of( CRawTerm.from( p_object ) );
- }
- /**
- * transformas a map into a literal
- *
- * @param p_map input map
- * @return term stream
- */
- @Nonnull
- private static Stream<ITerm> flatmap( @Nonnull final Map<String, ?> p_map )
- {
- return p_map.entrySet()
- .stream()
- .map( i ->
- CLiteral.from(
- i.getKey().toLowerCase().replaceAll( "[^([a-z][0-9]\\-/_)]]", "_" ),
- flatterm( i.getValue() )
- )
- );
- }
- /**
- * transforms a collection into a term stream
- *
- * @param p_collection collection
- * @return term stream
- */
- @Nonnull
- private static Stream<ITerm> flatcollection( @Nonnull final Collection<?> p_collection )
- {
- return p_collection.stream().flatMap( IBaseRest::flatterm );
- }
- }