package act.mail.meta;
/*-
* #%L
* ACT Framework
* %%
* Copyright (C) 2014 - 2017 ActFramework
* %%
* 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.
* #L%
*/
import act.asm.Type;
import act.util.DestroyableBase;
import org.osgl.util.C;
import org.osgl.util.S;
import javax.enterprise.context.ApplicationScoped;
import static act.Destroyable.Util.destroyAll;
/**
* Stores all class level information to support generating of mailer method
*/
@ApplicationScoped
public final class MailerClassMetaInfo extends DestroyableBase {
private Type type;
private String configId;
private boolean isAbstract = false;
private String ctxField = null;
private boolean ctxFieldIsPrivate = true;
private C.List<SenderMethodMetaInfo> senders = C.newList();
// mailerLookup index mailer method by method name
private C.Map<String, SenderMethodMetaInfo> mailerLookup = null;
private boolean isMailer;
private String contextPath;
public MailerClassMetaInfo className(String name) {
this.type = Type.getObjectType(name);
return this;
}
@Override
protected void releaseResources() {
destroyAll(senders, ApplicationScoped.class);
senders.clear();
if (null != mailerLookup) {
destroyAll(mailerLookup.values(), ApplicationScoped.class);
mailerLookup.clear();
}
super.releaseResources();
}
public String className() {
return type.getClassName();
}
public MailerClassMetaInfo configId(String id) {
configId = id;
return this;
}
public String configId() {
return configId;
}
public String internalName() {
return type.getInternalName();
}
public Type type() {
return type;
}
public MailerClassMetaInfo setAbstract() {
isAbstract = true;
return this;
}
public boolean isAbstract() {
return isAbstract;
}
public boolean isMailer() {
return isMailer;
}
public MailerClassMetaInfo isMailer(boolean b) {
isMailer = b;
return this;
}
public MailerClassMetaInfo ctxField(String fieldName, boolean isPrivate) {
ctxField = fieldName;
ctxFieldIsPrivate = isPrivate;
return this;
}
public String nonPrivateCtxField() {
if (null != ctxField) {
return ctxFieldIsPrivate ? null : ctxField;
}
return null;
}
public String ctxField() {
if (null != ctxField) {
return ctxField;
}
return null;
}
public boolean hasCtxField() {
return null != ctxField;
}
public boolean ctxFieldIsPrivate() {
return ctxFieldIsPrivate;
}
public MailerClassMetaInfo addSender(SenderMethodMetaInfo info) {
senders.add(info);
return this;
}
public SenderMethodMetaInfo sender(String name) {
if (null == mailerLookup) {
for (SenderMethodMetaInfo act : senders) {
if (S.eq(name, act.name())) {
return act;
}
}
return null;
}
return mailerLookup.get(name);
}
public String contextPath() {
return contextPath;
}
public MailerClassMetaInfo contextPath(String path) {
if (S.blank(path)) {
contextPath = "/";
} else {
contextPath = path;
}
return this;
}
}