blob: da504dc634a296d810f40f220b5c02b4f70130c6 [file] [log] [blame]
/**
* @copyright
* ====================================================================
* 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.
* ====================================================================
* @endcopyright
*/
package org.tigris.subversion.javahl;
import java.util.EventObject;
/**
* The event passed to the {@link Notify2#onNotify(NotifyInformation)}
* API to notify {@link SVNClientInterface} of relevant events.
*
* @since 1.2
*/
public class NotifyInformation extends EventObject
{
// Update the serialVersionUID when there is an incompatible change made to
// this class. See the Java documentation (following link or its counter-
// part in your specific Java release) for when a change is incompatible.
// https://docs.oracle.com/en/java/javase/11/docs/specs/serialization/version.html#type-changes-affecting-serialization
private static final long serialVersionUID = 1L;
/**
* The {@link NotifyAction} which triggered this event.
*/
private int action;
/**
* The {@link NodeKind} of the item.
*/
private int kind;
/**
* The MIME type of the item.
*/
private String mimeType;
/**
* Any lock for the item.
*/
private Lock lock;
/**
* Any error message for the item.
*/
private String errMsg;
/**
* The {@link NotifyStatus} of the content of the item.
*/
private int contentState;
/**
* The {@link NotifyStatus} of the properties of the item.
*/
private int propState;
/**
* The {@link LockStatus} of the lock of the item.
*/
private int lockState;
/**
* The revision of the item.
*/
private long revision;
/**
* The name of the changelist.
* @since 1.5
*/
private String changelistName;
/**
* The range of the merge just beginning to occur.
* @since 1.5
*/
private RevisionRange mergeRange;
/**
* A common absolute path prefix that can be subtracted from .path.
* @since 1.6
*/
private String pathPrefix;
/**
* This constructor is to be used by the native code.
*
* @param path The path of the item, which is the source of the event.
* @param action The {@link NotifyAction} which triggered this event.
* @param kind The {@link NodeKind} of the item.
* @param mimeType The MIME type of the item.
* @param lock Any lock for the item.
* @param errMsg Any error message for the item.
* @param contentState The {@link NotifyStatus} of the content of
* the item.
* @param propState The {@link NotifyStatus} of the properties of
* the item.
* @param lockState The {@link LockStatus} of the lock of the item.
* @param revision The revision of the item.
* @param changelistName The name of the changelist.
* @param mergeRange The range of the merge just beginning to occur.
* @param pathPrefix A common path prefix.
*/
NotifyInformation(String path, int action, int kind, String mimeType,
Lock lock, String errMsg, int contentState,
int propState, int lockState, long revision,
String changelistName, RevisionRange mergeRange,
String pathPrefix)
{
super(path == null ? "" : path);
this.action = action;
this.kind = kind;
this.mimeType = mimeType;
this.lock = lock;
this.errMsg = errMsg;
this.contentState = contentState;
this.propState = propState;
this.lockState = lockState;
this.revision = revision;
this.changelistName = changelistName;
this.mergeRange = mergeRange;
this.pathPrefix = pathPrefix;
}
/**
* A backward-compat callback.
*/
public NotifyInformation(
org.apache.subversion.javahl.ClientNotifyInformation aInfo)
{
this(aInfo.getPath(),
fromAAction(aInfo.getAction()),
NodeKind.fromApache(aInfo.getKind()), aInfo.getMimeType(),
aInfo.getLock() == null ? null : new Lock(aInfo.getLock()),
aInfo.getErrMsg(), fromAStatus(aInfo.getContentState()),
fromAStatus(aInfo.getPropState()),
aInfo.getLockState().ordinal(), aInfo.getRevision(),
aInfo.getChangelistName(),
aInfo.getMergeRange() == null ? null
: new RevisionRange(aInfo.getMergeRange()),
aInfo.getPathPrefix());
}
/**
* @return The path of the item, which is the source of the event.
*/
public String getPath()
{
return (String) super.source;
}
/**
* @return The {@link NotifyAction} which triggered this event.
*/
public int getAction()
{
return action;
}
/**
* @return The {@link NodeKind} of the item.
*/
public int getKind()
{
return kind;
}
/**
* @return The MIME type of the item.
*/
public String getMimeType()
{
return mimeType;
}
/**
* @return Any lock for the item.
*/
public Lock getLock()
{
return lock;
}
/**
* @return Any error message for the item.
*/
public String getErrMsg()
{
return errMsg;
}
/**
* @return The {@link NotifyStatus} of the content of the item.
*/
public int getContentState()
{
return contentState;
}
/**
* @return The {@link NotifyStatus} of the properties of the item.
*/
public int getPropState()
{
return propState;
}
/**
* @return The {@link LockStatus} of the lock of the item.
*/
public int getLockState()
{
return lockState;
}
/**
* @return The revision of the item.
*/
public long getRevision()
{
return revision;
}
/**
* @return The name of the changelist.
* @since 1.5
*/
public String getChangelistName()
{
return changelistName;
}
/**
* @return The range of the merge just beginning to occur.
* @since 1.5
*/
public RevisionRange getMergeRange()
{
return mergeRange;
}
/**
* @return The common absolute path prefix.
* @since 1.6
*/
public String getPathPrefix()
{
return pathPrefix;
}
private static int
fromAStatus(org.apache.subversion.javahl.ClientNotifyInformation.Status aStatus)
{
switch(aStatus)
{
default:
case inapplicable:
return NotifyStatus.inapplicable;
case unknown:
return NotifyStatus.unknown;
case unchanged:
return NotifyStatus.unchanged;
case missing:
return NotifyStatus.missing;
case obstructed:
return NotifyStatus.obstructed;
case changed:
return NotifyStatus.changed;
case merged:
return NotifyStatus.merged;
case conflicted:
return NotifyStatus.conflicted;
}
}
private static int
fromAAction(org.apache.subversion.javahl.ClientNotifyInformation.Action aAction)
{
if (aAction == null)
return -1;
int order = aAction.ordinal();
/* The new class adds an item after changelist_clear, so adjust
accordingly. */
if (order < NotifyAction.changelist_clear)
return order;
else
return order - 1;
}
}