blob: c7f52b0b766674707b146d3c6892852e33aec46d [file] [log] [blame]
// Copyright (C) 2008 The Android Open Source Project
//
// Licensed 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 com.google.gerrit.reviewdb.client;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.CompoundKey;
import com.google.gwtorm.client.StringKey;
/** An {@link Account} interested in a {@link Project}. */
public final class AccountProjectWatch {
public enum NotifyType {
NEW_CHANGES, NEW_PATCHSETS, ALL_COMMENTS, SUBMITTED_CHANGES,
ABANDONED_CHANGES, ALL
}
public static final String FILTER_ALL = "*";
public static class Key extends CompoundKey<Account.Id> {
private static final long serialVersionUID = 1L;
@Column(id = 1)
protected Account.Id accountId;
@Column(id = 2)
protected Project.NameKey projectName;
@Column(id = 3)
protected Filter filter;
protected Key() {
accountId = new Account.Id();
projectName = new Project.NameKey();
filter = new Filter();
}
public Key(Account.Id a, Project.NameKey g, String f) {
accountId = a;
projectName = g;
filter = new Filter(f);
}
@Override
public Account.Id getParentKey() {
return accountId;
}
public Project.NameKey getProjectName() {
return projectName;
}
public Filter getFilter() {
return filter;
}
@Override
public com.google.gwtorm.client.Key<?>[] members() {
return new com.google.gwtorm.client.Key<?>[] {projectName, filter};
}
}
public static class Filter extends StringKey<com.google.gwtorm.client.Key<?>> {
private static final long serialVersionUID = 1L;
@Column(id = 1)
protected String filter;
protected Filter() {
}
public Filter(String f) {
filter = f != null && !f.isEmpty() ? f : FILTER_ALL;
}
@Override
public String get() {
return filter;
}
@Override
protected void set(String newValue) {
filter = newValue;
}
}
@Column(id = 1, name = Column.NONE)
protected Key key;
/** Automatically send email notifications of new changes? */
@Column(id = 2)
protected boolean notifyNewChanges;
/** Automatically receive comments published to this project */
@Column(id = 3)
protected boolean notifyAllComments;
/** Automatically receive changes submitted to this project */
@Column(id = 4)
protected boolean notifySubmittedChanges;
@Column(id = 5)
protected boolean notifyNewPatchSets;
@Column(id = 6)
protected boolean notifyAbandonedChanges;
protected AccountProjectWatch() {
}
public AccountProjectWatch(final AccountProjectWatch.Key k) {
key = k;
}
public AccountProjectWatch.Key getKey() {
return key;
}
public Account.Id getAccountId() {
return key.accountId;
}
public Project.NameKey getProjectNameKey() {
return key.projectName;
}
public String getFilter() {
return FILTER_ALL.equals(key.filter.get()) ? null : key.filter.get();
}
public boolean isNotify(final NotifyType type) {
switch (type) {
case NEW_CHANGES:
return notifyNewChanges;
case NEW_PATCHSETS:
return notifyNewPatchSets;
case ALL_COMMENTS:
return notifyAllComments;
case SUBMITTED_CHANGES:
return notifySubmittedChanges;
case ABANDONED_CHANGES:
return notifyAbandonedChanges;
case ALL:
break;
}
return false;
}
public void setNotify(final NotifyType type, final boolean v) {
switch (type) {
case NEW_CHANGES:
notifyNewChanges = v;
break;
case NEW_PATCHSETS:
notifyNewPatchSets = v;
break;
case ALL_COMMENTS:
notifyAllComments = v;
break;
case SUBMITTED_CHANGES:
notifySubmittedChanges = v;
break;
case ABANDONED_CHANGES:
notifyAbandonedChanges = v;
break;
case ALL:
notifyNewChanges = v;
notifyNewPatchSets = v;
notifyAllComments = v;
notifySubmittedChanges = v;
notifyAbandonedChanges = v;
break;
}
}
}