/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.log;
import ru.codeinside.adm.AdminService;
import ru.codeinside.adm.AdminServiceProvider;
import ru.codeinside.adm.database.Bid;
import ru.codeinside.adm.database.Employee;
import ru.codeinside.adm.database.EnclosureEntity;
import ru.codeinside.adm.database.Group;
import ru.codeinside.adm.database.InfoSystem;
import ru.codeinside.adm.database.InfoSystemService;
import ru.codeinside.adm.database.Organization;
import ru.codeinside.adm.database.Procedure;
import ru.codeinside.adm.database.ProcedureProcessDefinition;
import ru.codeinside.adm.database.Service;
import ru.codeinside.adm.database.ServiceResponseEntity;
import javax.ejb.DependsOn;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
@Singleton
@DependsOn("BaseBean")
@Lock(LockType.READ)
public class Logger {
private static final String PERSIST = "Persist";
private static final String UPDATE = "Update";
private static final String REMOVE = "Remove";
@PostPersist
public void persist(Object obj) {
createLog(obj, PERSIST);
}
@PostUpdate
public void update(Object obj) {
createLog(obj, UPDATE);
}
@PostRemove
public void remove(Object obj) {
createLog(obj, REMOVE);
}
private void createLog(Object obj, String action) {
AdminService adminService = AdminServiceProvider.tryGet();
if (adminService == null) {
return;
}
Actor actor = adminService.createActor();
String entityName = obj.getClass().getSimpleName();
String entityId = "unknow";
String info = null;
//TODO: использовать метаданные!
if (obj instanceof Employee) {
Employee employee = (Employee) obj;
entityId = employee.getLogin();
} else if (obj instanceof Organization) {
Organization organization = (Organization) obj;
entityId = organization.getId().toString();
} else if (obj instanceof Group) {
Group group = (Group) obj;
entityId = group.getId().toString();
} else if (obj instanceof Procedure) {
Procedure procedure = (Procedure) obj;
entityId = procedure.getId();
} else if (obj instanceof ProcedureProcessDefinition) {
ProcedureProcessDefinition ppf = (ProcedureProcessDefinition) obj;
entityId = ppf.getProcessDefinitionId();
} else if (obj instanceof Service) {
Service service = (Service) obj;
entityId = service.getId().toString();
} else if (obj instanceof Bid) {
Bid bid = (Bid) obj;
entityId = bid.getId().toString();
if (PERSIST == action) {
final Procedure procedure = bid.getProcedure();
info = " procedure id: " + procedure.getId() + " ; заявитель: " + bid.getDeclarant();
}
} else if (obj instanceof InfoSystem) {
InfoSystem infoSystem = (InfoSystem) obj;
entityId = infoSystem.getCode();
} else if (obj instanceof InfoSystemService) {
InfoSystemService iss = (InfoSystemService) obj;
entityId = iss.getId().toString();
} else if (obj instanceof EnclosureEntity) {
EnclosureEntity ee = (EnclosureEntity) obj;
entityId = ee.getId();
} else if (obj instanceof ServiceResponseEntity) {
ServiceResponseEntity sre = (ServiceResponseEntity) obj;
entityId = sre.getId().toString();
}
AdminServiceProvider.get().createLog(actor, entityName, entityId, action, info, true);
}
}