diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml
index 7988c8709b..2332abec29 100644
--- a/config/alfresco/public-rest-context.xml
+++ b/config/alfresco/public-rest-context.xml
@@ -416,7 +416,25 @@
-
+
+
+
+
+
+
+
+ org.alfresco.rest.api.Audit
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/java/org/alfresco/rest/api/Audit.java b/source/java/org/alfresco/rest/api/Audit.java
new file mode 100644
index 0000000000..f7f50cff26
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/Audit.java
@@ -0,0 +1,90 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco 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.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.rest.api;
+
+import org.alfresco.rest.api.model.AuditApp;
+import org.alfresco.rest.framework.resource.parameters.Parameters;
+
+/**
+ * Handles audit (applications & entries)
+ *
+ * @author janv
+ */
+public interface Audit
+{
+ /**
+ * Gets a single audit application by id
+ *
+ * @param auditAppId
+ * @param parameters
+ * @return an audit app
+ */
+ AuditApp getAuditApp(String auditAppId, Parameters parameters);
+
+ /**
+ * Lists audit applications
+ *
+ * @param parameters
+ * @return Collection of audit apps
+ */
+ //CollectionWithPagingInfo listAuditApps(Parameters parameters);
+
+ /**
+ * Updates a single audit application by id
+ *
+ * @param auditAppId
+ * @param auditApp
+ * @param parameters
+ * @return an audit entry
+ */
+ //AuditApp update(String auditAppId, AuditApp auditApp, Parameters parameters);
+
+ /**
+ * Gets a single audit entry by id
+ *
+ * @param auditEntryId
+ * @param parameters
+ * @return an audit entry
+ */
+ //AuditEntry getAuditEntry(long auditEntryId, Parameters parameters);
+
+ /**
+ * Lists audit entries
+ *
+ * @param auditAppId if null then across all audit apps
+ * @param parameters
+ * @return Collection of audit entries
+ */
+ //CollectionWithPagingInfo listAuditEntries(String auditAppId, Parameters parameters);
+
+ /**
+ * Deletes a set of audit entries
+ *
+ * @param set of auditEntryIds
+ * @return
+ */
+ //void deleteAuditEntries(List auditEntryIds);
+}
diff --git a/source/java/org/alfresco/rest/api/audit/AuditApplicationsEntityResource.java b/source/java/org/alfresco/rest/api/audit/AuditApplicationsEntityResource.java
new file mode 100644
index 0000000000..21feec6a7c
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/audit/AuditApplicationsEntityResource.java
@@ -0,0 +1,85 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco 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.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ * #L%
+ */
+
+package org.alfresco.rest.api.audit;
+
+
+import org.alfresco.rest.api.Audit;
+import org.alfresco.rest.api.model.AuditApp;
+import org.alfresco.rest.framework.WebApiDescription;
+import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
+import org.alfresco.rest.framework.resource.EntityResource;
+import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
+import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
+import org.alfresco.rest.framework.resource.parameters.Parameters;
+import org.alfresco.util.ParameterCheck;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * An implementation of an Entity Resource for handling audit applications
+ *
+ * @author janv
+ */
+@EntityResource(name="audit-applications", title = "Audit Applications")
+public class AuditApplicationsEntityResource implements EntityResourceAction.ReadById,
+ EntityResourceAction.Read, EntityResourceAction.Update, InitializingBean
+{
+ private Audit audit;
+
+ public void setAudit(Audit audit)
+ {
+ this.audit = audit;
+ }
+
+ @Override
+ public void afterPropertiesSet()
+ {
+ ParameterCheck.mandatory("audit", this.audit);
+ }
+
+ @Override
+ @WebApiDescription(title="", description="")
+ public AuditApp readById(String auditAppId, Parameters parameters) throws EntityNotFoundException
+ {
+ return audit.getAuditApp(auditAppId, parameters);
+ }
+
+ @Override
+ @WebApiDescription(title = "Update group", description = "Update group")
+ public AuditApp update(String auditAppId, AuditApp auditApp, Parameters parameters)
+ {
+ //return audit.update(auditAppId, auditApp, parameters);
+ return null; // TODO fixme
+ }
+
+ @Override
+ @WebApiDescription(title="", description="")
+ public CollectionWithPagingInfo readAll(Parameters params)
+ {
+ //return audit.listAuditApps(params);
+ return null; // TODO fixme
+ }
+}
diff --git a/source/java/org/alfresco/rest/api/audit/package-info.java b/source/java/org/alfresco/rest/api/audit/package-info.java
new file mode 100644
index 0000000000..3f0c9a02fd
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/audit/package-info.java
@@ -0,0 +1,30 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco 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.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ * #L%
+ */
+
+@WebApi(name="alfresco", scope=Api.SCOPE.PUBLIC, version=1)
+package org.alfresco.rest.api.audit;
+import org.alfresco.rest.framework.Api;
+import org.alfresco.rest.framework.WebApi;
\ No newline at end of file
diff --git a/source/java/org/alfresco/rest/api/impl/AuditImpl.java b/source/java/org/alfresco/rest/api/impl/AuditImpl.java
new file mode 100644
index 0000000000..6d554235f2
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/impl/AuditImpl.java
@@ -0,0 +1,92 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco 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.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.rest.api.impl;
+
+import org.alfresco.rest.api.Audit;
+import org.alfresco.rest.api.model.AuditApp;
+import org.alfresco.rest.framework.core.exceptions.DisabledServiceException;
+import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
+import org.alfresco.rest.framework.resource.parameters.Parameters;
+import org.alfresco.service.cmr.audit.AuditService;
+
+import java.util.Map;
+
+/**
+ * Handles audit (applications & entries)
+ *
+ * @author janv
+ */
+public class AuditImpl implements Audit
+{
+ private final static String DISABLED = "Audit is disabled system-wide";
+
+ private AuditService auditService;
+
+ public void setAuditService(AuditService auditService)
+ {
+ this.auditService = auditService;
+ }
+
+ private void checkEnabled()
+ {
+ if (! auditService.isAuditEnabled())
+ {
+ throw new DisabledServiceException(DISABLED);
+ }
+ }
+
+ @Override
+ public AuditApp getAuditApp(String auditAppId, Parameters parameters)
+ {
+ checkEnabled();
+
+ AuditService.AuditApplication auditApplication = findAuditAppById(auditAppId);
+
+ if (auditApplication == null)
+ {
+ throw new EntityNotFoundException(auditAppId);
+ }
+
+ return new AuditApp(auditApplication.getKey().substring(1), auditApplication.getName(), auditApplication.isEnabled());
+ }
+
+ private AuditService.AuditApplication findAuditAppById(String auditAppId)
+ {
+ AuditService.AuditApplication auditApp = null;
+ Map auditApplicationsByName = auditService.getAuditApplications();
+ if (auditApplicationsByName != null)
+ {
+ for (AuditService.AuditApplication auditApplication : auditApplicationsByName.values())
+ {
+ if (auditApplication.getKey().equals("/" + auditAppId))
+ {
+ auditApp = auditApplication;
+ }
+ }
+ }
+ return auditApp;
+ }
+}
diff --git a/source/java/org/alfresco/rest/api/model/AuditApp.java b/source/java/org/alfresco/rest/api/model/AuditApp.java
new file mode 100644
index 0000000000..173ceee395
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/model/AuditApp.java
@@ -0,0 +1,90 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco 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.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.rest.api.model;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+/**
+ * A representation of a Audit App
+ *
+ * @author janv
+ *
+ */
+public class AuditApp
+{
+ private String id;
+ private String name;
+ private Boolean isEnabled;
+
+ public AuditApp()
+ {
+ }
+
+ public AuditApp(String id, String name, boolean isEnabled)
+ {
+ this.id = id;
+ this.name = name;
+ this.isEnabled = isEnabled;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @JsonProperty(value="isEnabled")
+ public Boolean getIsEnabled()
+ {
+ return isEnabled;
+ }
+
+ @JsonProperty(value="isEnabled")
+ public void setIsEnabled(Boolean isEnabled)
+ {
+ this.isEnabled = isEnabled;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "AuditApp [id=" + id + ", name= " + name + ", isEnabled=" + isEnabled + "]";
+ }
+}