blob: 159a47818ed53fb79c54863561c2029ff1bf36b3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.eclipselink.core.internal.context.persistence.logging;
import java.util.Map;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logger;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.Logging;
import org.eclipse.jpt.eclipselink.core.context.persistence.logging.LoggingLevel;
import org.eclipse.jpt.eclipselink.core.internal.context.persistence.EclipseLinkPersistenceUnitProperties;
import org.eclipse.jpt.utility.internal.StringTools;
import org.eclipse.jpt.utility.internal.iterables.EmptyIterable;
import org.eclipse.text.edits.ReplaceEdit;
/**
* EclipseLinkLogging
*/
public class EclipseLinkLogging extends EclipseLinkPersistenceUnitProperties
implements Logging
{
// ********** EclipseLink properties **********
private LoggingLevel level;
private Boolean timestamp;
private Boolean thread;
private Boolean session;
private Boolean exceptions;
private String logFileLocation;
private String logger; // storing EclipseLinkStringValue since value can be Logger or custom class
// ********** constructors **********
public EclipseLinkLogging(PersistenceUnit parent) {
super(parent);
}
// ********** initialization **********
/**
* Initializes properties with values from the persistence unit.
*/
@Override
protected void initializeProperties() {
// TOREVIEW - handle incorrect String in persistence.xml
this.level =
this.getEnumValue(ECLIPSELINK_LEVEL, LoggingLevel.values());
this.timestamp =
this.getBooleanValue(ECLIPSELINK_TIMESTAMP);
this.thread =
this.getBooleanValue(ECLIPSELINK_THREAD);
this.session =
this.getBooleanValue(ECLIPSELINK_SESSION);
this.exceptions =
this.getBooleanValue(ECLIPSELINK_EXCEPTIONS);
this.logFileLocation =
this.getStringValue(ECLIPSELINK_LOG_FILE_LOCATION);
this.logger = this.getLoggerProtertyValue();
}
/**
* Gets the Logger property from the persistence unit.
*/
private String getLoggerProtertyValue() {
String value = this.getStringValue(ECLIPSELINK_LOGGER);
if (value == null) {
return null; // no property found
}
Logger standardLogger = this.getEnumValue(ECLIPSELINK_LOGGER, Logger.values());
return (standardLogger == null) ? value : getPropertyStringValueOf(standardLogger);
}
// ********** behavior **********
public void propertyValueChanged(String propertyName, String newValue) {
if (propertyName.equals(ECLIPSELINK_LEVEL)) {
this.levelChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_TIMESTAMP)) {
this.timestampChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_THREAD)) {
this.threadChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_SESSION)) {
this.sessionChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_EXCEPTIONS)) {
this.exceptionsChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_LOG_FILE_LOCATION)) {
this.logFileLocationChanged(newValue);
}
else if (propertyName.equals(ECLIPSELINK_LOGGER)) {
this.loggerChanged(newValue);
}
}
public void propertyRemoved(String propertyName) {
if (propertyName.equals(ECLIPSELINK_LEVEL)) {
this.levelChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_TIMESTAMP)) {
this.timestampChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_THREAD)) {
this.threadChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_SESSION)) {
this.sessionChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_EXCEPTIONS)) {
this.exceptionsChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_LOG_FILE_LOCATION)) {
this.logFileLocationChanged(null);
}
else if (propertyName.equals(ECLIPSELINK_LOGGER)) {
this.loggerChanged(null);
}
}
/**
* Adds property names key/value pairs, where:
* key = EclipseLink property key
* value = property id
*/
@Override
protected void addPropertyNames(Map<String, String> propertyNames) {
propertyNames.put(
ECLIPSELINK_LEVEL,
LEVEL_PROPERTY);
propertyNames.put(
ECLIPSELINK_TIMESTAMP,
TIMESTAMP_PROPERTY);
propertyNames.put(
ECLIPSELINK_THREAD,
THREAD_PROPERTY);
propertyNames.put(
ECLIPSELINK_SESSION,
SESSION_PROPERTY);
propertyNames.put(
ECLIPSELINK_EXCEPTIONS,
EXCEPTIONS_PROPERTY);
propertyNames.put(
ECLIPSELINK_LOG_FILE_LOCATION,
LOG_FILE_LOCATION_PROPERTY);
propertyNames.put(
ECLIPSELINK_LOGGER,
LOGGER_PROPERTY);
}
// ********** LoggingLevel **********
public LoggingLevel getLevel() {
return this.level;
}
public void setLevel(LoggingLevel newLevel) {
LoggingLevel old = this.level;
this.level = newLevel;
this.putProperty(LEVEL_PROPERTY, newLevel);
this.firePropertyChanged(LEVEL_PROPERTY, old, newLevel);
}
private void levelChanged(String stringValue) {
LoggingLevel newValue = getEnumValueOf(stringValue, LoggingLevel.values());
LoggingLevel old = this.level;
this.level = newValue;
this.firePropertyChanged(LEVEL_PROPERTY, old, newValue);
}
public LoggingLevel getDefaultLevel() {
return DEFAULT_LEVEL;
}
// ********** Timestamp **********
public Boolean getTimestamp() {
return this.timestamp;
}
public void setTimestamp(Boolean newTimestamp) {
Boolean old = this.timestamp;
this.timestamp = newTimestamp;
this.putProperty(TIMESTAMP_PROPERTY, newTimestamp);
this.firePropertyChanged(TIMESTAMP_PROPERTY, old, newTimestamp);
}
private void timestampChanged(String stringValue) {
Boolean newValue = getBooleanValueOf(stringValue);
Boolean old = this.timestamp;
this.timestamp = newValue;
this.firePropertyChanged(TIMESTAMP_PROPERTY, old, newValue);
}
public Boolean getDefaultTimestamp() {
return DEFAULT_TIMESTAMP;
}
// ********** Thread **********
public Boolean getThread() {
return this.thread;
}
public void setThread(Boolean newThread) {
Boolean old = this.thread;
this.thread = newThread;
this.putProperty(THREAD_PROPERTY, newThread);
this.firePropertyChanged(THREAD_PROPERTY, old, newThread);
}
private void threadChanged(String stringValue) {
Boolean newValue = getBooleanValueOf(stringValue);
Boolean old = this.thread;
this.thread = newValue;
this.firePropertyChanged(THREAD_PROPERTY, old, newValue);
}
public Boolean getDefaultThread() {
return DEFAULT_THREAD;
}
// ********** Session **********
public Boolean getSession() {
return this.session;
}
public void setSession(Boolean newSession) {
Boolean old = this.session;
this.session = newSession;
this.putProperty(SESSION_PROPERTY, newSession);
this.firePropertyChanged(SESSION_PROPERTY, old, newSession);
}
private void sessionChanged(String stringValue) {
Boolean newValue = getBooleanValueOf(stringValue);
Boolean old = this.session;
this.session = newValue;
this.firePropertyChanged(SESSION_PROPERTY, old, newValue);
}
public Boolean getDefaultSession() {
return DEFAULT_SESSION;
}
// ********** Exceptions **********
public Boolean getExceptions() {
return this.exceptions;
}
public void setExceptions(Boolean newExceptions) {
Boolean old = this.exceptions;
this.exceptions = newExceptions;
this.putProperty(EXCEPTIONS_PROPERTY, newExceptions);
this.firePropertyChanged(EXCEPTIONS_PROPERTY, old, newExceptions);
}
private void exceptionsChanged(String stringValue) {
Boolean newValue = getBooleanValueOf(stringValue);
Boolean old = this.exceptions;
this.exceptions = newValue;
this.firePropertyChanged(EXCEPTIONS_PROPERTY, old, newValue);
}
public Boolean getDefaultExceptions() {
return DEFAULT_EXCEPTIONS;
}
// ********** logFileLocation **********
public String getLogFileLocation() {
return this.logFileLocation;
}
public void setLogFileLocation(String newLogFileLocation) {
String old = this.logFileLocation;
this.logFileLocation = (StringTools.stringIsNotEmpty(newLogFileLocation)) ?
newLogFileLocation :
this.getDefaultLogFileLocation();
this.putProperty(LOG_FILE_LOCATION_PROPERTY, this.logFileLocation);
this.firePropertyChanged(LOG_FILE_LOCATION_PROPERTY, old, this.logFileLocation);
}
private void logFileLocationChanged(String newValue) {
String old = this.logFileLocation;
this.logFileLocation = newValue;
this.firePropertyChanged(LOG_FILE_LOCATION_PROPERTY, old, newValue);
}
public String getDefaultLogFileLocation() {
return DEFAULT_LOG_FILE_LOCATION;
}
// ********** Logger **********
/**
* Returns Logger or custom logger class.
*
* @return EclipseLink string value for Logger enum or custom logger class
*/
public String getLogger() {
return this.logger;
}
/**
* Sets EclipseLink logger.
*
* @param newLogger - Logger
*/
public void setLogger(Logger newLogger) {
if( newLogger == null) {
this.setLogger_((String) null);
return;
}
this.setLogger_(getPropertyStringValueOf(newLogger));
}
/**
* Sets EclipseLink logger or custom logger.
*
* @param newLogger -
* Can be a EclipseLink logger literal or
* a fully qualified class name of a custom logger.
*/
public void setLogger(String newLogger) {
if( newLogger == null) {
this.setLogger_(null);
return;
}
Logger l = Logger.getLoggerFor(newLogger);
if(l == null) { // custom Logger class
this.setLogger_(newLogger);
}
else {
this.setLogger(l);
}
}
private void setLogger_(String newLogger) {
String old = this.logger;
this.logger = newLogger;
this.putProperty(LOGGER_PROPERTY, newLogger);
this.firePropertyChanged(LOGGER_PROPERTY, old, newLogger);
}
private void loggerChanged(String newValue) {
String old = this.logger;
this.logger = newValue;
this.firePropertyChanged(LOGGER_PROPERTY, old, newValue);
}
public String getDefaultLogger() {
return DEFAULT_LOGGER;
}
// ********** refactoring ************
@Override
public Iterable<ReplaceEdit> createRenameTypeEdits(IType originalType, String newName) {
return this.createLoggerRenameTypeEdits(originalType, newName);
}
protected Iterable<ReplaceEdit> createLoggerRenameTypeEdits(IType originalType, String newName) {
//TODO seems like we should have the Property stored in a SessionCustomizer object instead of having to go
//find all of the Properties from the persistence unit.
PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_LOGGER);
if (property != null) {
return property.createRenameTypeEdits(originalType, newName);
}
return EmptyIterable.instance();
}
@Override
public Iterable<ReplaceEdit> createMoveTypeEdits(IType originalType, IPackageFragment newPackage) {
return this.createLoggerMoveTypeEdits(originalType, newPackage);
}
protected Iterable<ReplaceEdit> createLoggerMoveTypeEdits(IType originalType, IPackageFragment newPackage) {
PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_LOGGER);
if (property != null) {
return property.createMoveTypeEdits(originalType, newPackage);
}
return EmptyIterable.instance();
}
@Override
public Iterable<ReplaceEdit> createRenamePackageEdits(IPackageFragment originalPackage, String newName) {
return this.createLoggerRenamePackageEdits(originalPackage, newName);
}
protected Iterable<ReplaceEdit> createLoggerRenamePackageEdits(IPackageFragment originalPackage, String newName) {
//find all of the Properties from the persistence unit.
PersistenceUnit.Property property = getPersistenceUnit().getProperty(ECLIPSELINK_LOGGER);
if (property != null) {
return property.createRenamePackageEdits(originalPackage, newName);
}
return EmptyIterable.instance();
}
}