package com.tesora.dve.common.catalog;
/*
* #%L
* Tesora Inc.
* Database Virtualization Engine
* %%
* Copyright (C) 2011 - 2014 Tesora Inc.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import com.tesora.dve.sql.schema.ConnectionContext;
import com.tesora.dve.variables.KnownVariables;
public enum TemplateMode {
OPTIONAL(false, false),
REQUIRED(true, false),
STRICT(true, true);
public static TemplateMode getCurrentDefault(final ConnectionContext cc) {
return
KnownVariables.TEMPLATE_MODE.getValue((cc == null ? null : cc.getVariableSource()));
}
public static TemplateMode getCurrentDefault() {
return TemplateMode.getCurrentDefault(null);
}
public static TemplateMode getModeFromName(final ConnectionContext cc, final String name) {
if (name != null) {
return TemplateMode.valueOf(name);
}
return TemplateMode.getCurrentDefault(cc);
}
public static TemplateMode getModeFromName(final String name) {
return TemplateMode.getModeFromName(null, name);
}
public static boolean hasModeForName(final String name) {
try {
TemplateMode.valueOf(name);
} catch (final IllegalArgumentException e) {
return false;
}
return true;
}
private boolean requiresTemplate;
private boolean isStrict;
private TemplateMode(final boolean requiresTemplate, final boolean isStrict) {
this.requiresTemplate = requiresTemplate;
this.isStrict = isStrict;
}
public boolean isDefault(final ConnectionContext cc) {
return this.equals(TemplateMode.getCurrentDefault(cc));
}
public boolean isDefault() {
return this.isDefault(null);
}
public boolean requiresTemplate() {
return this.requiresTemplate;
}
public boolean isStrict() {
return (this.requiresTemplate && this.isStrict);
}
}