http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
new file mode 100644
index 0000000..df00c15
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
+
+import org.apache.ambari.logsearch.conf.AuthPropsConfig;
+import org.apache.ambari.logsearch.util.SSLUtil;
+import org.apache.commons.httpclient.auth.InvalidCredentialsException;
+import org.apache.log4j.Logger;
+import org.glassfish.jersey.client.JerseyClient;
+import org.glassfish.jersey.client.JerseyClientBuilder;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
+
+/**
+ * Layer to send REST request to External server using jersey client
+ */
+@Named
+public class ExternalServerClient {
+
+  private static Logger LOG = Logger.getLogger(ExternalServerClient.class);
+  private static final ThreadLocal<JerseyClient> localJerseyClient = new 
ThreadLocal<JerseyClient>() {
+    @Override
+    protected JerseyClient initialValue() {
+      return SSLUtil.isKeyStoreSpecified() ?
+          new 
JerseyClientBuilder().sslContext(SSLUtil.getSSLContext()).build() :
+          JerseyClientBuilder.createClient();
+    }
+  };
+
+  @Inject
+  private AuthPropsConfig authPropsConfig;
+
+  /**
+   * Send GET request to an external server
+   */
+  public Object sendGETRequest(String loginUrl, Class<?> klass, String 
username, String password) throws Exception {
+    String url = authPropsConfig.getExternalAuthHostUrl() + loginUrl;
+    JerseyClient client = localJerseyClient.get();
+    HttpAuthenticationFeature authFeature = 
HttpAuthenticationFeature.basicBuilder()
+      .credentials(username, password)
+      .build();
+    client.register(authFeature);
+
+    WebTarget target = client.target(url);
+    LOG.debug("URL: " + url);
+    
+    Invocation.Builder invocationBuilder =  target.request();
+    try {
+      Response response = invocationBuilder.get();
+      if (response.getStatus() != Response.Status.OK.getStatusCode()
+        && response.getStatus() != Response.Status.FOUND.getStatusCode()) {
+        throw new InvalidCredentialsException(String.format("External auth 
failed with status code: %d, response: %s",
+          response.getStatus(), response.readEntity(String.class)));
+      }
+      return response.readEntity(klass);
+    } catch (Exception e) {
+      throw new Exception(e.getCause());
+    } finally {
+      localJerseyClient.remove();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/HadoopServiceConfigHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/HadoopServiceConfigHelper.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/HadoopServiceConfigHelper.java
new file mode 100644
index 0000000..0e2087f
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/HadoopServiceConfigHelper.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.ambari.logsearch.util.JSONUtil;
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+
+import com.google.gson.JsonParseException;
+
+public class HadoopServiceConfigHelper {
+  private static final Logger LOG = 
Logger.getLogger(HadoopServiceConfigHelper.class);
+  
+  public static String getHadoopServiceConfigJSON() {
+    String fileContent = null;
+
+    try {
+      ClassLoader classLoader = 
HadoopServiceConfigHelper.class.getClassLoader();
+      File file = new 
File(classLoader.getResource("HadoopServiceConfig.json").getFile());
+      fileContent = FileUtils.readFileToString(file);
+    } catch (IOException e) {
+      LOG.error("Unable to read HadoopServiceConfig.json", e);
+    }
+
+    return JSONUtil.isJSONValid(fileContent) ? fileContent : null;
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static Set<String> getAllLogIds() {
+    Set<String> logIds = new TreeSet<>();
+    
+    String key = null;
+    JSONArray componentArray = null;
+    try {
+      String hadoopServiceConfigJSON = getHadoopServiceConfigJSON();
+      JSONObject hadoopServiceJsonObject = new 
JSONObject(hadoopServiceConfigJSON).getJSONObject("service");
+      Iterator<String> hadoopSerivceKeys = hadoopServiceJsonObject.keys();
+      while (hadoopSerivceKeys.hasNext()) {
+        key = hadoopSerivceKeys.next();
+        componentArray = 
hadoopServiceJsonObject.getJSONObject(key).getJSONArray("components");
+        for (int i = 0; i < componentArray.length(); i++) {
+          JSONObject componentJsonObject = (JSONObject) componentArray.get(i);
+          String logId = componentJsonObject.getString("name");
+          logIds.add(logId);
+        }
+      }
+    } catch (JsonParseException | JSONException je) {
+      LOG.error("Error parsing JSON. key=" + key + ", componentArray=" + 
componentArray, je);
+      return null;
+    }
+
+    return logIds;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchConstants.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchConstants.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchConstants.java
new file mode 100644
index 0000000..3a74918
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchConstants.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+public class LogSearchConstants {
+
+  public static final String LOGSEARCH_SESSION_ID = "LOGSEARCHSESSIONID";
+
+  // Log Levels
+  public static final String INFO = "INFO";
+  public static final String WARN = "WARN";
+  public static final String DEBUG = "DEBUG";
+  public static final String ERROR = "ERROR";
+  public static final String TRACE = "TRACE";
+  public static final String FATAL = "FATAL";
+  public static final String UNKNOWN = "UNKNOWN";
+  
+  public static final String[] SUPPORTED_LOG_LEVELS = {FATAL, ERROR, WARN, 
INFO, DEBUG, TRACE, UNKNOWN};
+
+  // Application Constants
+  public static final String HOST = "H";
+  public static final String COMPONENT = "C";
+  public static final String SCROLL_TYPE_AFTER = "after";
+  public static final String SCROLL_TYPE_BEFORE = "before";
+
+  // Seprator's
+  public static final String I_E_SEPRATOR = "\\|i\\:\\:e\\|";
+
+  //SUFFIX
+  public static final String NGRAM_PREFIX = "ngram_";
+
+  //Date Format for SOLR
+  public static final String SOLR_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
+  public static final String SOLR_DATE_FORMAT_PREFIX_Z = 
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
+
+  //Solr Order By
+  public static final String ASCENDING_ORDER = "asc";
+  public static final String DESCENDING_ORDER = "desc";
+
+  // logfeeder 
+  public static final String LOGFEEDER_FILTER_NAME = "log_feeder_config";
+
+  public static final String SORT = "sort";
+  
+  //Facet Constant
+  public static final String FACET_FIELD = "facet.field";
+  public static final String FACET_PIVOT = "facet.pivot";
+  public static final String FACET_PIVOT_MINCOUNT = "facet.pivot.mincount";
+  public static final String FACET_INDEX = "index";
+
+  // Request params
+  public static final String REQUEST_PARAM_XAXIS = "xAxis";
+  public static final String REQUEST_PARAM_YAXIS = "yAxis";
+  public static final String REQUEST_PARAM_STACK_BY = "stackBy";
+  public static final String REQUEST_PARAM_UNIT = "unit";
+  public static final String REQUEST_PARAM_TOP = "top";
+  public static final String REQUEST_PARAM_CLUSTER_NAMES = "clusters";
+  public static final String REQUEST_PARAM_BUNDLE_ID = "bundle_id";
+  public static final String REQUEST_PARAM_START_INDEX = "startIndex";
+  public static final String REQUEST_PARAM_PAGE = "page";
+  public static final String REQUEST_PARAM_PAGE_SIZE = "pageSize";
+  public static final String REQUEST_PARAM_SORT_BY = "sortBy";
+  public static final String REQUEST_PARAM_SORT_TYPE = "sortType";
+  public static final String REQUEST_PARAM_START_TIME = "start_time";
+  public static final String REQUEST_PARAM_END_TIME = "end_time";
+  public static final String REQUEST_PARAM_FROM = "from";
+  public static final String REQUEST_PARAM_TO = "to";
+  public static final String REQUEST_PARAM_FIELD = "field";
+  public static final String REQUEST_PARAM_FORMAT = "format";
+  public static final String REQUEST_PARAM_LAST_PAGE = "lastPage";
+  public static final String REQUEST_PARAM_I_MESSAGE = "iMessage";
+  public static final String REQUEST_PARAM_E_MESSAGE = "eMessage";
+  public static final String REQUEST_PARAM_MUST_BE = "mustBe";
+  public static final String REQUEST_PARAM_MUST_NOT = "mustNot";
+  public static final String REQUEST_PARAM_INCLUDE_QUERY = "includeQuery";
+  public static final String REQUEST_PARAM_EXCLUDE_QUERY = "excludeQuery";
+  public static final String REQUEST_PARAM_ID = "id";
+  public static final String REQUEST_PARAM_SCROLL_TYPE = "scrollType";
+  public static final String REQUEST_PARAM_NUMBER_ROWS = "numberRows";
+  public static final String REQUEST_PARAM_LEVEL = "level";
+  public static final String REQUEST_PARAM_HOST_NAME = "host_name";
+  public static final String REQUEST_PARAM_COMPONENT_NAME = "component_name";
+  public static final String REQUEST_PARAM_FILE_NAME = "file_name";
+  public static final String REQUEST_PARAM_KEYWORD = "find";
+  public static final String REQUEST_PARAM_SOURCE_LOG_ID = "sourceLogId";
+  public static final String REQUEST_PARAM_KEYWORD_TYPE = "keywordType";
+  public static final String REQUEST_PARAM_TOKEN = "token";
+  public static final String REQUEST_PARAM_FILTER_NAME = "filterName";
+  public static final String REQUEST_PARAM_ROW_TYPE = "rowType";
+  public static final String REQUEST_PARAM_UTC_OFFSET = "utcOffset";
+  public static final String REQUEST_PARAM_HOSTS = "hostList";
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchContext.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchContext.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchContext.java
new file mode 100644
index 0000000..b4b52b3
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogSearchContext.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.io.Serializable;
+
+import org.apache.ambari.logsearch.web.model.User;
+
+public class LogSearchContext implements Serializable {
+  
+  private static final long serialVersionUID = 1L;
+  
+  private User user;
+
+  public User getUser() {
+    return user;
+  }
+
+  public void setUser(User user) {
+    this.user = user;
+  }
+
+  
//------------------------------------------------------------------------------------------------------
+  
+  private static final ThreadLocal<LogSearchContext> contextThreadLocal = new 
ThreadLocal<LogSearchContext>();
+
+  public static LogSearchContext getContext() {
+    return contextThreadLocal.get();
+  }
+
+  public static void setContext(LogSearchContext context) {
+    contextThreadLocal.set(context);
+  }
+
+  public static void resetContext() {
+    contextThreadLocal.remove();
+  }
+
+  public static String getCurrentUsername() {
+    LogSearchContext context = LogSearchContext.getContext();
+    if (context != null && context.getUser() != null) {
+        return context.getUser().getUsername();
+    }
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogType.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogType.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogType.java
new file mode 100644
index 0000000..2e6cddb
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/LogType.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+public enum LogType {
+  SERVICE("Service"),
+  AUDIT("Audit");
+
+  private String label;
+
+  private LogType(String label) {
+    this.label = label;
+  }
+
+  public String getLabel() {
+    return label;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ManageStartEndTime.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ManageStartEndTime.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ManageStartEndTime.java
new file mode 100644
index 0000000..b6aa2d0
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ManageStartEndTime.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.util.Date;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.commons.lang.time.DateUtils;
+
+public class ManageStartEndTime extends TimerTask {
+  private static final int UPDATE_TIME_IN_SECONDS = 40;
+
+  private static Date startDate;
+  private static Date endDate;
+  
+  public static void manage() {
+    Timer timer = new Timer();
+    timer.schedule(new ManageStartEndTime(), 0, UPDATE_TIME_IN_SECONDS * 1000);
+  }
+  
+  private ManageStartEndTime() {
+    endDate = new Date();
+    startDate = DateUtils.addHours(endDate, -1);
+  }
+
+  @Override
+  public synchronized void run() {
+    synchronized (ManageStartEndTime.class) {
+      startDate = DateUtils.addSeconds(startDate, UPDATE_TIME_IN_SECONDS);
+      endDate = DateUtils.addHours(startDate, 1);
+    }
+  }
+
+  public static synchronized Date[] getStartEndTime() {
+    return new Date[] {startDate, endDate};
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/Marker.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/Marker.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/Marker.java
new file mode 100644
index 0000000..3e088ba
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/Marker.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Marker {
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageData.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageData.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageData.java
new file mode 100644
index 0000000..34c83ee
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageData.java
@@ -0,0 +1,165 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you 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.ambari.logsearch.common;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class MessageData implements java.io.Serializable {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Message key
+   */
+  protected String name;
+  /**
+   * Resource bundle key
+   */
+  protected String rbKey;
+  /**
+   * Message description. Use rbKey for doing localized lookup
+   */
+  protected String message;
+  /**
+   * Id of the object to which this message is related to
+   */
+  protected Long objectId;
+  /**
+   * Name of the field or attribute to which this message is related to
+   */
+  protected String fieldName;
+
+  /**
+   * This method sets the value to the member attribute <b>name</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param name
+   *            Value to set member attribute <b>name</b>
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>name</b>
+   * 
+   * @return String - value of member attribute <b>name</b>.
+   */
+  public String getName() {
+    return this.name;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>rbKey</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param rbKey
+   *            Value to set member attribute <b>rbKey</b>
+   */
+  public void setRbKey(String rbKey) {
+    this.rbKey = rbKey;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>rbKey</b>
+   * 
+   * @return String - value of member attribute <b>rbKey</b>.
+   */
+  public String getRbKey() {
+    return this.rbKey;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>message</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param message
+   *            Value to set member attribute <b>message</b>
+   */
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>message</b>
+   * 
+   * @return String - value of member attribute <b>message</b>.
+   */
+  public String getMessage() {
+    return this.message;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>objectId</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param objectId
+   *            Value to set member attribute <b>objectId</b>
+   */
+  public void setObjectId(Long objectId) {
+    this.objectId = objectId;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>objectId</b>
+   * 
+   * @return Long - value of member attribute <b>objectId</b>.
+   */
+  public Long getObjectId() {
+    return this.objectId;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>fieldName</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param fieldName
+   *            Value to set member attribute <b>fieldName</b>
+   */
+  public void setFieldName(String fieldName) {
+    this.fieldName = fieldName;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>fieldName</b>
+   * 
+   * @return String - value of member attribute <b>fieldName</b>.
+   */
+  public String getFieldName() {
+    return this.fieldName;
+  }
+
+  /**
+   * This return the bean content in string format
+   * 
+   * @return formatedStr
+   */
+  public String toString() {
+    String str = "MessageData={";
+    str += super.toString();
+    str += "name={" + name + "} ";
+    str += "rbKey={" + rbKey + "} ";
+    str += "message={" + message + "} ";
+    str += "objectId={" + objectId + "} ";
+    str += "fieldName={" + fieldName + "} ";
+    str += "}";
+    return str;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageEnums.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageEnums.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageEnums.java
new file mode 100644
index 0000000..4f1725f
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/MessageEnums.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+public enum MessageEnums {
+
+  // Common Errors
+  DATA_NOT_FOUND("logsearch.error.data_not_found", "Data not found"),
+  OPER_NOT_ALLOWED_FOR_STATE("logsearch.error.oper_not_allowed_for_state", 
"Operation not allowed in current state"),
+  OPER_NOT_ALLOWED_FOR_ENTITY("logsearch.error.oper_not_allowed_for_state", 
"Operation not allowed for entity"),
+  OPER_NO_PERMISSION("logsearch.error.oper_no_permission", "User doesn't have 
permission to perform this operation"),
+  DATA_NOT_UPDATABLE("logsearch.error.data_not_updatable", "Data not 
updatable"),
+  ERROR_CREATING_OBJECT("logsearch.error.create_object", "Error creating 
object"),
+  ERROR_DUPLICATE_OBJECT("logsearch.error.duplicate_object", "Error creating 
duplicate object"),
+  ERROR_SYSTEM("logsearch.error.system", "System Error. Please try later."),
+  SOLR_ERROR("logsearch.solr.error","Something went wrong, For more details 
check the logs or configuration."),
+  ZNODE_NOT_READY("logsearch.zk.znode.error", "ZNode is not available."),
+  ZK_CONFIG_NOT_READY("logsearch.zk.config.error", "Collection configuration 
has not uploaded yet"),
+  SOLR_COLLECTION_NOT_READY("logsearch.solr.collection.error", "Solr has not 
accessible yet for collection."),
+
+  // Common Validations
+  INVALID_PASSWORD("logsearch.validation.invalid_password", "Invalid 
password"),
+  INVALID_INPUT_DATA("logsearch.validation.invalid_input_data", "Invalid input 
data"),
+  NO_INPUT_DATA("logsearch.validation.no_input_data", "Input data is not 
provided"),
+  INPUT_DATA_OUT_OF_BOUND("logsearch.validation.data_out_of_bound", "Input 
data if out of bound"),
+  NO_NAME("logsearch.validation.no_name", "Name is not provided"),
+  NO_OR_INVALID_COUNTRY_ID("logsearch.validation.no_country_id", "Valid 
Country Id was not provided"),
+  NO_OR_INVALID_CITY_ID("logsearch.validation.no_city_id", "Valid City Id was 
not provided"),
+  NO_OR_INVALID_STATE_ID("logsearch.validation.no_state_id", "Valid State Id 
was not provided");
+
+  private String rbKey;
+  private String messageDesc;
+
+  private MessageEnums(String rbKey, String messageDesc) {
+    this.rbKey = rbKey;
+    this.messageDesc = messageDesc;
+  }
+
+  public MessageData getMessage() {
+    MessageData msg = new MessageData();
+    msg.setName(this.toString());
+    msg.setRbKey(rbKey);
+    msg.setMessage(messageDesc);
+    return msg;
+  }
+
+  public MessageData getMessage(Long objectId, String fieldName) {
+    MessageData msg = new MessageData();
+    msg.setName(this.toString());
+    msg.setRbKey(rbKey);
+    msg.setMessage(messageDesc);
+    msg.setObjectId(objectId);
+    msg.setFieldName(fieldName);
+    return msg;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertiesHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertiesHelper.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertiesHelper.java
new file mode 100644
index 0000000..73a43ad
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertiesHelper.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import 
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+
+public class PropertiesHelper extends PropertyPlaceholderConfigurer {
+  private static final Logger logger = 
LoggerFactory.getLogger(PropertiesHelper.class);
+  
+  private static final String LOGSEARCH_PROP_FILE="logsearch.properties";
+  
+  private static Map<String, String> propertiesMap;
+
+  private PropertiesHelper() {
+  }
+  
+  static {
+    propertiesMap = new HashMap<String, String>();
+    Properties properties = new Properties();
+    URL fileCompleteUrl = 
Thread.currentThread().getContextClassLoader().getResource(LOGSEARCH_PROP_FILE);
+    FileInputStream fileInputStream = null;
+    try {
+      File file = new File(fileCompleteUrl.toURI());
+      fileInputStream = new FileInputStream(file.getAbsoluteFile());
+      properties.load(fileInputStream);
+    } catch (IOException | URISyntaxException e) {
+      logger.error("error loading prop for protocol config",e);
+    } finally {
+      if (fileInputStream != null) {
+        try {
+          fileInputStream.close();
+        } catch (IOException e) {
+        }
+      }
+    }
+    for (String key : properties.stringPropertyNames()) {
+      String value = properties.getProperty(key);
+      propertiesMap.put(key, value);
+    }
+  }
+
+  @Override
+  protected void processProperties(ConfigurableListableBeanFactory 
beanFactory, Properties props) throws BeansException {
+    super.processProperties(beanFactory, props);
+
+    propertiesMap = new HashMap<String, String>();
+
+    // First add the system properties
+    Set<Object> keySet = System.getProperties().keySet();
+    for (Object key : keySet) {
+      String keyStr = key.toString();
+      propertiesMap.put(keyStr, 
System.getProperties().getProperty(keyStr).trim());
+    }
+
+    // add our properties now
+    keySet = props.keySet();
+    for (Object key : keySet) {
+      String keyStr = key.toString();
+      propertiesMap.put(keyStr, props.getProperty(keyStr).trim());
+    }
+  }
+
+  public static String getProperty(String key, String defaultValue) {
+    if (key == null) {
+      return null;
+    }
+    String rtrnVal = propertiesMap.get(key);
+    if (rtrnVal == null) {
+      rtrnVal = defaultValue;
+    }
+    return rtrnVal;
+  }
+
+  public static String getProperty(String key) {
+    if (key == null) {
+      return null;
+    }
+    return propertiesMap.get(key);
+  }
+
+  public static String[] getPropertyStringList(String key) {
+    if (key == null) {
+      return null;
+    }
+    String value = propertiesMap.get(key);
+    if (value == null || value.trim().equals("")) {
+      return new String[0];
+    } else {
+      String[] splitValues = value.split(",");
+      String[] returnValues = new String[splitValues.length];
+      for (int i = 0; i < splitValues.length; i++) {
+        returnValues[i] = splitValues[i].trim();
+      }
+      return returnValues;
+    }
+  }
+
+  public static boolean getBooleanProperty(String key, boolean defaultValue) {
+    if (key == null) {
+      return defaultValue;
+    }
+    String value = getProperty(key);
+    if (value == null) {
+      return defaultValue;
+    }
+    return Boolean.parseBoolean(value);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/StatusMessage.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/StatusMessage.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/StatusMessage.java
new file mode 100644
index 0000000..d4567de
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/StatusMessage.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+public class StatusMessage {
+
+  private String status;
+
+  public StatusMessage(String status) {
+    this.status = status;
+  }
+
+  public StatusMessage(int status) {
+    this.status = String.valueOf(status);
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/VResponse.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/VResponse.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/VResponse.java
new file mode 100644
index 0000000..0c052ab
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/VResponse.java
@@ -0,0 +1,164 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class VResponse implements
+    java.io.Serializable {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Enum values for ResponseStatus
+   */
+  /**
+   * STATUS_SUCCESS is an element of enum ResponseStatus. Its value is
+   * "STATUS_SUCCESS".
+   */
+  public static final int STATUS_SUCCESS = 0;
+  /**
+   * STATUS_ERROR is an element of enum ResponseStatus. Its value is
+   * "STATUS_ERROR".
+   */
+  public static final int STATUS_ERROR = 1;
+  /**
+   * STATUS_VALIDATION is an element of enum ResponseStatus. Its value is
+   * "STATUS_VALIDATION".
+   */
+  public static final int STATUS_VALIDATION = 2;
+  /**
+   * STATUS_WARN is an element of enum ResponseStatus. Its value is
+   * "STATUS_WARN".
+   */
+  public static final int STATUS_WARN = 3;
+  /**
+   * STATUS_INFO is an element of enum ResponseStatus. Its value is
+   * "STATUS_INFO".
+   */
+  public static final int STATUS_INFO = 4;
+  /**
+   * STATUS_PARTIAL_SUCCESS is an element of enum ResponseStatus. Its value is
+   * "STATUS_PARTIAL_SUCCESS".
+   */
+  public static final int STATUS_PARTIAL_SUCCESS = 5;
+
+  /**
+   * Max value for enum ResponseStatus_MAX
+   */
+  public static final int ResponseStatus_MAX = 5;
+
+  /**
+   * Status code This attribute is of type enum Response::ResponseStatus
+   */
+  protected int statusCode;
+  /**
+   * Message description
+   */
+  protected String msgDesc;
+  /**
+   * List of messages
+   */
+  protected List<MessageData> messageList;
+
+  /**
+   * Default constructor. This will set all the attributes to default value.
+   */
+  public VResponse() {
+    statusCode = 0;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>statusCode</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param statusCode
+   *            Value to set member attribute <b>statusCode</b>
+   */
+  public void setStatusCode(int statusCode) {
+    this.statusCode = statusCode;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>statusCode</b>
+   * 
+   * @return int - value of member attribute <b>statusCode</b>.
+   */
+  public int getStatusCode() {
+    return this.statusCode;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>msgDesc</b>. You
+   * cannot set null to the attribute.
+   * 
+   * @param msgDesc
+   *            Value to set member attribute <b>msgDesc</b>
+   */
+  public void setMsgDesc(String msgDesc) {
+    this.msgDesc = msgDesc;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>msgDesc</b>
+   * 
+   * @return String - value of member attribute <b>msgDesc</b>.
+   */
+  public String getMsgDesc() {
+    return this.msgDesc;
+  }
+
+  /**
+   * This method sets the value to the member attribute <b>messageList</b>.
+   * You cannot set null to the attribute.
+   * 
+   * @param messageList
+   *            Value to set member attribute <b>messageList</b>
+   */
+  public void setMessageList(List<MessageData> messageList) {
+    this.messageList = messageList;
+  }
+
+  /**
+   * Returns the value for the member attribute <b>messageList</b>
+   * 
+   * @return List<MessageData> - value of member attribute <b>messageList</b>.
+   */
+  public List<MessageData> getMessageList() {
+    return this.messageList;
+  }
+
+  /**
+   * This return the bean content in string format
+   * 
+   * @return formatedStr
+   */
+  public String toString() {
+    String str = "VResponse={";
+    str += super.toString();
+    str += "statusCode={" + statusCode + "} ";
+    str += "msgDesc={" + msgDesc + "} ";
+    str += "messageList={" + messageList + "} ";
+    str += "}";
+    return str;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/XMLPropertiesHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/XMLPropertiesHelper.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/XMLPropertiesHelper.java
new file mode 100644
index 0000000..690a60f
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/XMLPropertiesHelper.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.common;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.log4j.Logger;
+import org.springframework.util.DefaultPropertiesPersister;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class XMLPropertiesHelper extends DefaultPropertiesPersister {
+  private static Logger logger = Logger.getLogger(XMLPropertiesHelper.class);
+
+  public XMLPropertiesHelper() {
+  }
+
+  @Override
+  public void loadFromXml(Properties properties, InputStream inputStream)
+      throws IOException {
+    try {
+      DocumentBuilderFactory xmlDocumentBuilderFactory = 
DocumentBuilderFactory.newInstance();
+      xmlDocumentBuilderFactory.setIgnoringComments(true);
+      xmlDocumentBuilderFactory.setNamespaceAware(true);
+      DocumentBuilder xmlDocumentBuilder = 
xmlDocumentBuilderFactory.newDocumentBuilder();
+      Document xmlDocument = xmlDocumentBuilder.parse(inputStream);
+      if (xmlDocument != null) {
+        xmlDocument.getDocumentElement().normalize();
+        NodeList nList = xmlDocument.getElementsByTagName("property");
+        if (nList != null) {
+          for (int temp = 0; temp < nList.getLength(); temp++) {
+            Node nNode = nList.item(temp);
+            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+              Element eElement = (Element) nNode;
+              String propertyName = "";
+              String propertyValue = "";
+              if (eElement.getElementsByTagName("name") != null && 
eElement.getElementsByTagName("name").item(0) != null) {
+                propertyName = 
eElement.getElementsByTagName("name").item(0).getTextContent().trim();
+              }
+              if (eElement.getElementsByTagName("value") != null && 
eElement.getElementsByTagName("value").item(0) != null) {
+                propertyValue = 
eElement.getElementsByTagName("value").item(0).getTextContent().trim();
+              }
+              if (propertyName != null && !propertyName.isEmpty()) {
+                properties.put(propertyName, propertyValue);
+              }
+            }
+          }
+        }
+      }
+    } catch (Exception e) {
+      logger.error("Error loading xml properties ", e);
+    }
+  }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApiDocConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApiDocConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApiDocConfig.java
new file mode 100644
index 0000000..630e73a
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApiDocConfig.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import io.swagger.jaxrs.config.BeanConfig;
+import io.swagger.jaxrs.listing.ApiListingResource;
+import io.swagger.jaxrs.listing.SwaggerSerializers;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ApiDocConfig {
+
+  @Bean
+  public ApiListingResource apiListingResource() {
+    return new ApiListingResource();
+  }
+
+  @Bean
+  public SwaggerSerializers swaggerSerializers() {
+    return new SwaggerSerializers();
+  }
+
+  @Bean
+  public BeanConfig swaggerConfig() {
+    BeanConfig beanConfig = new BeanConfig();
+    beanConfig.setSchemes(new String[]{"http", "https"});
+    beanConfig.setBasePath("/api/v1");
+    beanConfig.setTitle("Log Search REST API");
+    beanConfig.setDescription("Log aggregation, analysis, and visualization.");
+    beanConfig.setLicense("Apache 2.0");
+    
beanConfig.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html";);
+    beanConfig.setScan(true);
+    beanConfig.setVersion("1.0.0");
+    beanConfig.setResourcePackage("org.apache.ambari.logsearch.rest");
+    return beanConfig;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java
new file mode 100644
index 0000000..82a09b2
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import freemarker.template.TemplateException;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.support.ConversionServiceFactoryBean;
+import 
org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean;
+
+import java.io.IOException;
+
+@Configuration
+@ComponentScan("org.apache.ambari.logsearch")
+@PropertySource(value = {"classpath:default.properties", 
"classpath:logsearch.properties"})
+public class ApplicationConfig {
+
+  @Bean
+  public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
+    return new PropertySourcesPlaceholderConfigurer();
+  }
+
+  @Bean(name="conversionService")
+  public ConversionServiceFactoryBean conversionServiceFactoryBean() {
+    ConversionServiceFactoryBean conversionServiceFactoryBean = new 
ConversionServiceFactoryBean();
+    conversionServiceFactoryBean.afterPropertiesSet();
+    return conversionServiceFactoryBean;
+  }
+
+  @Bean
+  public freemarker.template.Configuration freemarkerConfiguration() throws 
IOException, TemplateException {
+    FreeMarkerConfigurationFactoryBean factoryBean = new 
FreeMarkerConfigurationFactoryBean();
+    factoryBean.setPreferFileSystemAccess(false);
+    factoryBean.setTemplateLoaderPath("classpath:/templates");
+    factoryBean.afterPropertiesSet();
+    return factoryBean.getObject();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/AuthPropsConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/AuthPropsConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/AuthPropsConfig.java
new file mode 100644
index 0000000..54cc10c
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/AuthPropsConfig.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+public class AuthPropsConfig {
+
+  @Value("${logsearch.auth.file.enabled:true}")
+  boolean authFileEnabled;
+  @Value("${logsearch.auth.ldap.enabled:false}")
+  boolean authLdapEnabled;
+  @Value("${logsearch.auth.simple.enabled:false}")
+  boolean authSimpleEnabled;
+  @Value("${logsearch.auth.external_auth.enabled:false}")
+  boolean authExternalEnabled;
+  @Value("${logsearch.auth.external_auth.host_url:'http://ip:port'}")
+  private String externalAuthHostUrl;
+  
@Value("${logsearch.auth.external_auth.login_url:/api/v1/users/$USERNAME/privileges?fields=*}")
+  private String externalAuthLoginUrl;
+  @Value("${logsearch.login.credentials.file:user_pass.json}")
+  private String credentialsFile;
+  @Value("${logsearch.auth.jwt.enabled:false}")
+  private boolean authJwtEnabled;
+  @Value("${logsearch.auth.jwt.provider_url:}")
+  private String providedUrl;
+  @Value("${logsearch.auth.jwt.public_key:}")
+  private String publicKey;
+  @Value("${logsearch.auth.jwt.cookie.name:hadoop-jwt}")
+  private String cookieName;
+  @Value("${logsearch.auth.jwt.query.param.original_url:originalUrl=}")
+  private String originalUrlQueryParam;
+  @Value("#{'${logsearch.auth.jwt.audiances:}'.split(',')}")
+  private List<String> audiences;
+
+  public boolean isAuthFileEnabled() {
+    return authFileEnabled;
+  }
+
+  public void setAuthFileEnabled(boolean authFileEnabled) {
+    this.authFileEnabled = authFileEnabled;
+  }
+
+  public boolean isAuthLdapEnabled() {
+    return authLdapEnabled;
+  }
+
+  public void setAuthLdapEnabled(boolean authLdapEnabled) {
+    this.authLdapEnabled = authLdapEnabled;
+  }
+
+  public boolean isAuthSimpleEnabled() {
+    return authSimpleEnabled;
+  }
+
+  public void setAuthSimpleEnabled(boolean authSimpleEnabled) {
+    this.authSimpleEnabled = authSimpleEnabled;
+  }
+
+  public String getCredentialsFile() {
+    return credentialsFile;
+  }
+
+  public void setCredentialsFile(String credentialsFile) {
+    this.credentialsFile = credentialsFile;
+  }
+
+  public String getExternalAuthHostUrl() {
+    return externalAuthHostUrl;
+  }
+
+  public void setExternalAuthHostUrl(String externalAuthHostUrl) {
+    this.externalAuthHostUrl = externalAuthHostUrl;
+  }
+
+  public String getExternalAuthLoginUrl() {
+    return externalAuthLoginUrl;
+  }
+
+  public void setExternalAuthLoginUrl(String externalAuthLoginUrl) {
+    this.externalAuthLoginUrl = externalAuthLoginUrl;
+  }
+
+  public boolean isAuthExternalEnabled() {
+    return authExternalEnabled;
+  }
+
+  public void setAuthExternalEnabled(boolean authExternalEnabled) {
+    this.authExternalEnabled = authExternalEnabled;
+  }
+
+  public boolean isAuthJwtEnabled() {
+    return authJwtEnabled;
+  }
+
+  public void setAuthJwtEnabled(boolean authJwtEnabled) {
+    this.authJwtEnabled = authJwtEnabled;
+  }
+
+  public String getProvidedUrl() {
+    return providedUrl;
+  }
+
+  public void setProvidedUrl(String providedUrl) {
+    this.providedUrl = providedUrl;
+  }
+
+  public String getPublicKey() {
+    return publicKey;
+  }
+
+  public void setPublicKey(String publicKey) {
+    this.publicKey = publicKey;
+  }
+
+  public String getCookieName() {
+    return cookieName;
+  }
+
+  public void setCookieName(String cookieName) {
+    this.cookieName = cookieName;
+  }
+
+  public String getOriginalUrlQueryParam() {
+    return originalUrlQueryParam;
+  }
+
+  public void setOriginalUrlQueryParam(String originalUrlQueryParam) {
+    this.originalUrlQueryParam = originalUrlQueryParam;
+  }
+
+  public List<String> getAudiences() {
+    return audiences;
+  }
+
+  public void setAudiences(List<String> audiences) {
+    this.audiences = audiences;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpHeaderConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpHeaderConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpHeaderConfig.java
new file mode 100644
index 0000000..cb8c097
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpHeaderConfig.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class LogSearchHttpHeaderConfig {
+
+  @Value("${logsearch.http.header.access-control-allow-origin:*}")
+  private String accessControlAllowOrigin;
+
+  @Value("${logsearch.http.header.access-control-allow-headers:origin, 
content-type, accept, authorization}")
+  private String accessControlAllowHeaders;
+
+  @Value("${logsearch.http.header.access-control-allow-credentials:true}")
+  private String accessControlAllowCredentials;
+
+  @Value("${logsearch.http.header.access-control-allow-methods:GET, POST, PUT, 
DELETE, OPTIONS, HEAD}")
+  private String accessControlAllowMethods;
+
+  public String getAccessControlAllowOrigin() {
+    return accessControlAllowOrigin;
+  }
+
+  public void setAccessControlAllowOrigin(String accessControlAllowOrigin) {
+    this.accessControlAllowOrigin = accessControlAllowOrigin;
+  }
+
+  public String getAccessControlAllowHeaders() {
+    return accessControlAllowHeaders;
+  }
+
+  public void setAccessControlAllowHeaders(String accessControlAllowHeaders) {
+    this.accessControlAllowHeaders = accessControlAllowHeaders;
+  }
+
+  public String getAccessControlAllowCredentials() {
+    return accessControlAllowCredentials;
+  }
+
+  public void setAccessControlAllowCredentials(String 
accessControlAllowCredentials) {
+    this.accessControlAllowCredentials = accessControlAllowCredentials;
+  }
+
+  public String getAccessControlAllowMethods() {
+    return accessControlAllowMethods;
+  }
+
+  public void setAccessControlAllowMethods(String accessControlAllowMethods) {
+    this.accessControlAllowMethods = accessControlAllowMethods;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
new file mode 100644
index 0000000..2f9cba4
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import com.google.common.collect.Lists;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import 
org.apache.ambari.logsearch.web.authenticate.LogsearchAuthFailureHandler;
+import 
org.apache.ambari.logsearch.web.authenticate.LogsearchAuthSuccessHandler;
+import 
org.apache.ambari.logsearch.web.authenticate.LogsearchLogoutSuccessHandler;
+import org.apache.ambari.logsearch.web.filters.LogsearchAuditLogsStateFilter;
+import 
org.apache.ambari.logsearch.web.filters.LogsearchAuthenticationEntryPoint;
+import org.apache.ambari.logsearch.web.filters.LogsearchCorsFilter;
+import 
org.apache.ambari.logsearch.web.filters.LogsearchKRBAuthenticationFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchJWTFilter;
+import 
org.apache.ambari.logsearch.web.filters.LogsearchSecurityContextFormationFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchServiceLogsStateFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchUserConfigStateFilter;
+import 
org.apache.ambari.logsearch.web.filters.LogsearchUsernamePasswordAuthenticationFilter;
+import 
org.apache.ambari.logsearch.web.security.LogsearchAuthenticationProvider;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import 
org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import 
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import 
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
+import 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.security.web.util.matcher.OrRequestMatcher;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.List;
+
+import static 
org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_SESSION_ID;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+  @Inject
+  private AuthPropsConfig authPropsConfig;
+
+  @Inject
+  private LogSearchHttpHeaderConfig logSearchHttpHeaderConfig;
+
+  @Inject
+  private SolrServiceLogPropsConfig solrServiceLogPropsConfig;
+
+  @Inject
+  private SolrAuditLogPropsConfig solrAuditLogPropsConfig;
+
+  @Inject
+  private SolrUserPropsConfig solrUserPropsConfig;
+
+  @Inject
+  @Named("solrServiceLogsState")
+  private SolrCollectionState solrServiceLogsState;
+
+  @Inject
+  @Named("solrAuditLogsState")
+  private SolrCollectionState solrAuditLogsState;
+
+  @Inject
+  @Named("solrUserConfigState")
+  private SolrCollectionState solrUserConfigState;
+
+  @Override
+  protected void configure(HttpSecurity http) throws Exception {
+    http
+      .csrf().disable()
+      .sessionManagement()
+         .sessionFixation()
+         .newSession()
+         .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
+      .and()
+      .authorizeRequests()
+        .requestMatchers(requestMatcher()).permitAll()
+        .antMatchers("/**").authenticated()
+      .and()
+      .authenticationProvider(logsearchAuthenticationProvider())
+        .formLogin()
+        .loginPage("/login.html")
+      .and()
+      .httpBasic()
+        .authenticationEntryPoint(logsearchAuthenticationEntryPoint())
+      .and()
+      .addFilterBefore(logsearchUsernamePasswordAuthenticationFilter(), 
UsernamePasswordAuthenticationFilter.class)
+      .addFilterBefore(logsearchKRBAuthenticationFilter(), 
UsernamePasswordAuthenticationFilter.class)
+      .addFilterAfter(securityContextFormationFilter(), 
FilterSecurityInterceptor.class)
+      .addFilterAfter(logsearchUserConfigFilter(), 
LogsearchSecurityContextFormationFilter.class)
+      .addFilterAfter(logsearchAuditLogFilter(), 
LogsearchSecurityContextFormationFilter.class)
+      .addFilterAfter(logsearchServiceLogFilter(), 
LogsearchSecurityContextFormationFilter.class)
+      .addFilterBefore(corsFilter(), 
LogsearchSecurityContextFormationFilter.class)
+      .addFilterBefore(logsearchJwtFilter(), 
LogsearchSecurityContextFormationFilter.class)
+      .logout()
+        .logoutUrl("/logout.html")
+        .deleteCookies(LOGSEARCH_SESSION_ID)
+        .logoutSuccessHandler(new LogsearchLogoutSuccessHandler());
+  }
+
+  @Bean
+  public LogsearchCorsFilter corsFilter() {
+    return new LogsearchCorsFilter(logSearchHttpHeaderConfig);
+  }
+
+  @Bean
+  public LogsearchSecurityContextFormationFilter 
securityContextFormationFilter() {
+    return new LogsearchSecurityContextFormationFilter();
+  }
+
+  @Bean
+  public LogsearchKRBAuthenticationFilter logsearchKRBAuthenticationFilter() {
+    return new LogsearchKRBAuthenticationFilter();
+  }
+
+  @Bean
+  public LogsearchAuthenticationProvider logsearchAuthenticationProvider() {
+    return new LogsearchAuthenticationProvider();
+  }
+
+  @Bean
+  public LogsearchJWTFilter logsearchJwtFilter() throws Exception {
+    LogsearchJWTFilter filter = new LogsearchJWTFilter(requestMatcher(), 
authPropsConfig);
+    filter.setAuthenticationManager(authenticationManagerBean());
+    filter.setAuthenticationSuccessHandler(new LogsearchAuthSuccessHandler());
+    filter.setAuthenticationFailureHandler(new LogsearchAuthFailureHandler());
+    return filter;
+  }
+
+  @Bean
+  public LogsearchAuthenticationEntryPoint logsearchAuthenticationEntryPoint() 
{
+    LogsearchAuthenticationEntryPoint entryPoint = new 
LogsearchAuthenticationEntryPoint("/login.html");
+    entryPoint.setForceHttps(false);
+    return entryPoint;
+  }
+
+  @Bean
+  public LogsearchUsernamePasswordAuthenticationFilter 
logsearchUsernamePasswordAuthenticationFilter() throws Exception {
+    LogsearchUsernamePasswordAuthenticationFilter filter = new 
LogsearchUsernamePasswordAuthenticationFilter();
+    filter.setAuthenticationSuccessHandler(new LogsearchAuthSuccessHandler());
+    filter.setAuthenticationFailureHandler(new LogsearchAuthFailureHandler());
+    filter.setAuthenticationManager(authenticationManagerBean());
+    return filter;
+  }
+
+  @Bean
+  public LogsearchServiceLogsStateFilter logsearchServiceLogFilter() {
+    return new LogsearchServiceLogsStateFilter(serviceLogsRequestMatcher(), 
solrServiceLogsState, solrServiceLogPropsConfig);
+  }
+
+  @Bean
+  public LogsearchAuditLogsStateFilter logsearchAuditLogFilter() {
+    return new LogsearchAuditLogsStateFilter(auditLogsRequestMatcher(), 
solrAuditLogsState, solrAuditLogPropsConfig);
+  }
+
+  @Bean
+  public LogsearchUserConfigStateFilter logsearchUserConfigFilter() {
+    return new LogsearchUserConfigStateFilter(userConfigRequestMatcher(), 
solrUserConfigState, solrUserPropsConfig);
+  }
+
+  @Bean
+  public RequestMatcher requestMatcher() {
+    List<RequestMatcher> matchers = Lists.newArrayList();
+    matchers.add(new AntPathRequestMatcher("/login.html"));
+    matchers.add(new AntPathRequestMatcher("/logout.html"));
+    matchers.add(new AntPathRequestMatcher("/styles/**"));
+    matchers.add(new AntPathRequestMatcher("/fonts/**"));
+    matchers.add(new AntPathRequestMatcher("/scripts/**"));
+    matchers.add(new AntPathRequestMatcher("/libs/**"));
+    matchers.add(new AntPathRequestMatcher("/templates/**"));
+    matchers.add(new AntPathRequestMatcher("/images/**"));
+    matchers.add(new AntPathRequestMatcher("/favicon.ico"));
+    matchers.add(new AntPathRequestMatcher("/api/v1/public/**"));
+    matchers.add(new AntPathRequestMatcher("/api/v1/swagger.json"));
+    matchers.add(new AntPathRequestMatcher("/api/v1/swagger.yaml"));
+    return new OrRequestMatcher(matchers);
+  }
+
+  public RequestMatcher serviceLogsRequestMatcher() {
+    return new AntPathRequestMatcher("/api/v1/service/logs/**");
+  }
+
+  public RequestMatcher auditLogsRequestMatcher() {
+    return new AntPathRequestMatcher("/api/v1/audit/logs/**");
+  }
+
+  public RequestMatcher userConfigRequestMatcher() {
+    return new AntPathRequestMatcher("/api/v1/userconfig/**");
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrAuditLogPropsConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrAuditLogPropsConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrAuditLogPropsConfig.java
new file mode 100644
index 0000000..5981bcc
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrAuditLogPropsConfig.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.apache.zookeeper.data.ACL;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+public class SolrAuditLogPropsConfig implements SolrPropsConfig {
+
+  @Value("${logsearch.solr.audit.logs.url:}")
+  private String solrUrl;
+
+  @Value("${logsearch.solr.audit.logs.zk_connect_string:}")
+  private String zkConnectString;
+
+  @Value("${logsearch.solr.collection.audit.logs:audit_logs}")
+  private String collection;
+
+  @Value("${logsearch.ranger.audit.logs.collection.name:}")
+  private String rangerCollection;
+
+  @Value("${logsearch.solr.audit.logs.config.name:audit_logs}")
+  private String configName;
+
+  @Value("${logsearch.solr.audit.logs.alias.name:audit_logs_alias}")
+  private String aliasNameIn;
+
+  @Value("${logsearch.audit.logs.split.interval.mins:none}")
+  private String splitInterval;
+
+  @Value("${logsearch.collection.audit.logs.numshards:1}")
+  private Integer numberOfShards;
+
+  @Value("${logsearch.collection.audit.logs.replication.factor:1}")
+  private Integer replicationFactor;
+
+  
@Value("#{ACLPropertiesSplitter.parseAcls('${logsearch.solr.audit.logs.zk.acls:}')}")
+  private List<ACL> zkAcls;
+
+  
@Value("${logsearch.solr.audit.logs.config_set.folder:/etc/ambari-logsearch-portal/conf/solr_configsets}")
+  private String configSetFolder;
+
+  @Override
+  public String getSolrUrl() {
+    return solrUrl;
+  }
+
+  @Override
+  public void setSolrUrl(String solrUrl) {
+    this.solrUrl = solrUrl;
+  }
+
+  @Override
+  public String getCollection() {
+    return collection;
+  }
+
+  @Override
+  public void setCollection(String collection) {
+    this.collection = collection;
+  }
+
+  @Override
+  public String getZkConnectString() {
+    return zkConnectString;
+  }
+
+  @Override
+  public void setZkConnectString(String zkConnectString) {
+    this.zkConnectString = zkConnectString;
+  }
+
+  @Override
+  public String getConfigName() {
+    return configName;
+  }
+
+  @Override
+  public void setConfigName(String configName) {
+    this.configName = configName;
+  }
+
+  @Override
+  public Integer getNumberOfShards() {
+    return numberOfShards;
+  }
+
+  @Override
+  public void setNumberOfShards(Integer numberOfShards) {
+    this.numberOfShards = numberOfShards;
+  }
+
+  @Override
+  public Integer getReplicationFactor() {
+    return replicationFactor;
+  }
+
+  @Override
+  public void setReplicationFactor(Integer replicationFactor) {
+    this.replicationFactor = replicationFactor;
+  }
+
+  @Override
+  public String getSplitInterval() {
+    return splitInterval;
+  }
+
+  @Override
+  public void setSplitInterval(String splitInterval) {
+    this.splitInterval = splitInterval;
+  }
+
+  @Override
+  public List<ACL> getZkAcls() {
+    return zkAcls;
+  }
+
+  @Override
+  public void setZkAcls(List<ACL> zkAcls) {
+    this.zkAcls = zkAcls;
+  }
+
+  @Override
+  public String getConfigSetFolder() {
+    return configSetFolder;
+  }
+
+  @Override
+  public void setConfigSetFolder(String configSetFolder) {
+    this.configSetFolder = configSetFolder;
+  }
+
+  public String getRangerCollection() {
+    return rangerCollection;
+  }
+
+  public void setRangerCollection(String rangerCollection) {
+    this.rangerCollection = rangerCollection;
+  }
+
+  public String getAliasNameIn() {
+    return aliasNameIn;
+  }
+
+  public void setAliasNameIn(String aliasNameIn) {
+    this.aliasNameIn = aliasNameIn;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
new file mode 100644
index 0000000..f00e8c5
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.apache.ambari.logsearch.conf.global.SolrAuditLogsState;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import org.apache.ambari.logsearch.conf.global.SolrServiceLogsState;
+import org.apache.ambari.logsearch.conf.global.SolrUserConfigState;
+import org.apache.ambari.logsearch.dao.SolrSchemaFieldDao;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.data.solr.core.SolrTemplate;
+import org.springframework.data.solr.repository.config.EnableSolrRepositories;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Configuration
+@EnableSolrRepositories
+@EnableScheduling
+public class SolrConfig {
+
+  @Bean(name = "serviceSolrTemplate")
+  public SolrTemplate serviceSolrTemplate() {
+    return null;
+  }
+
+  @Bean(name = "auditSolrTemplate")
+  @DependsOn("serviceSolrTemplate")
+  public SolrTemplate auditSolrTemplate() {
+    return null;
+  }
+
+  @Bean(name = "userConfigSolrTemplate")
+  @DependsOn("serviceSolrTemplate")
+  public SolrTemplate userConfigSolrTemplate() {
+    return null;
+  }
+
+  @Bean
+  @DependsOn({"serviceSolrTemplate", "auditSolrTemplate"})
+  public SolrSchemaFieldDao solrSchemaFieldDao() {
+    return new SolrSchemaFieldDao();
+  }
+
+  @Bean(name = "solrServiceLogsState")
+  public SolrCollectionState solrServiceLogsState() {
+    return new SolrServiceLogsState();
+  }
+
+  @Bean(name = "solrAuditLogsState")
+  public SolrCollectionState solrAuditLogsState() {
+    return new SolrAuditLogsState();
+  }
+
+  @Bean(name = "solrUserConfigState")
+  public SolrCollectionState solrUserConfigState() {
+    return new SolrUserConfigState();
+  }
+}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConnectionPropsConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConnectionPropsConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConnectionPropsConfig.java
new file mode 100644
index 0000000..7d37efd
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConnectionPropsConfig.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.apache.zookeeper.data.ACL;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.List;
+
+public abstract class SolrConnectionPropsConfig implements SolrPropsConfig {
+  @Value("${logsearch.solr.url:}")
+  private String solrUrl;
+
+  @Value("${logsearch.solr.zk_connect_string:}")
+  private String zkConnectString;
+
+  @Value("#{ACLPropertiesSplitter.parseAcls('${logsearch.solr.zk.acls:}')}")
+  private List<ACL> zkAcls;
+
+  
@Value("${logsearch.solr.config_set.folder:/etc/ambari-logsearch-portal/conf/solr_configsets}")
+  private String configSetFolder;
+
+  @Override
+  public String getSolrUrl() {
+    return solrUrl;
+  }
+
+  @Override
+  public void setSolrUrl(String solrUrl) {
+    this.solrUrl = solrUrl;
+  }
+
+  @Override
+  public String getZkConnectString() {
+    return zkConnectString;
+  }
+
+  @Override
+  public void setZkConnectString(String zkConnectString) {
+    this.zkConnectString = zkConnectString;
+  }
+
+  @Override
+  public List<ACL> getZkAcls() {
+    return zkAcls;
+  }
+
+  @Override
+  public void setZkAcls(List<ACL> zkAcls) {
+    this.zkAcls = zkAcls;
+  }
+
+  @Override
+  public String getConfigSetFolder() {
+    return configSetFolder;
+  }
+
+  @Override
+  public void setConfigSetFolder(String configSetFolder) {
+    this.configSetFolder = configSetFolder;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrKerberosConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrKerberosConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrKerberosConfig.java
new file mode 100644
index 0000000..7cf79b0
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrKerberosConfig.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SolrKerberosConfig {
+
+  
@Value("${logsearch.solr.jaas.file:/usr/lib/ambari-logsearch-portal/logsearch_solr_jaas.conf}")
+  private String jaasFile;
+
+  @Value("${logsearch.solr.kerberos.enable:false}")
+  private boolean enabled;
+
+  public String getJaasFile() {
+    return jaasFile;
+  }
+
+  public void setJaasFile(String jaasFile) {
+    this.jaasFile = jaasFile;
+  }
+
+  public boolean isEnabled() {
+    return enabled;
+  }
+
+  public void setEnabled(boolean enabled) {
+    this.enabled = enabled;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0f1e340/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrPropsConfig.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrPropsConfig.java
 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrPropsConfig.java
new file mode 100644
index 0000000..ceddf7e
--- /dev/null
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrPropsConfig.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ambari.logsearch.conf;
+
+import org.apache.zookeeper.data.ACL;
+
+import java.util.List;
+
+public interface SolrPropsConfig {
+  String getSolrUrl();
+
+  void setSolrUrl(String solrUrl);
+
+  String getZkConnectString();
+
+  void setZkConnectString(String zkConnectString);
+
+  String getCollection();
+
+  void setCollection(String collection);
+
+  String getConfigName();
+
+  void setConfigName(String configName);
+
+  Integer getNumberOfShards();
+
+  void setNumberOfShards(Integer numberOfShards);
+
+  Integer getReplicationFactor();
+
+  void setReplicationFactor(Integer replicationFactor);
+
+  String getSplitInterval();
+
+  void setSplitInterval(String splitInterval);
+
+  List<ACL> getZkAcls();
+
+  void setZkAcls(List<ACL> zkAcls);
+
+  String getConfigSetFolder();
+
+  void setConfigSetFolder(String configSetFolder);
+}

Reply via email to