package com.github.ryhmrt.mssqldiff.data;
import com.github.ryhmrt.mssqldiff.util.SqlUtil;
public class PermissionDiff extends Diff<Permission> {
@Override
public String getName() {
return getType() == Type.CREATED ? getTo().getUserName() : getFrom().getUserName();
}
@Override
public String toCreateSql() {
StringBuilder sb = new StringBuilder();
if (getTo().isCanSelect()) sb.append(grant("SELECT"));
if (getTo().isCanInsert()) sb.append(grant("INSERT"));
if (getTo().isCanUpdate()) sb.append(grant("UPDATE"));
if (getTo().isCanDelete()) sb.append(grant("DELETE"));
return sb.toString();
}
@Override
public String toDropSql() {
StringBuilder sb = new StringBuilder();
if (getFrom().isCanSelect()) sb.append(revoke("SELECT"));
if (getFrom().isCanInsert()) sb.append(revoke("INSERT"));
if (getFrom().isCanUpdate()) sb.append(revoke("UPDATE"));
if (getFrom().isCanDelete()) sb.append(revoke("DELETE"));
return sb.toString();
}
@Override
public String toModifySql() {
StringBuilder sb = new StringBuilder();
if (!getFrom().isCanSelect() && getTo().isCanSelect()) sb.append(grant("SELECT"));
if (!getFrom().isCanInsert() && getTo().isCanInsert()) sb.append(grant("INSERT"));
if (!getFrom().isCanUpdate() && getTo().isCanUpdate()) sb.append(grant("UPDATE"));
if (!getFrom().isCanDelete() && getTo().isCanDelete()) sb.append(grant("DELETE"));
if (getFrom().isCanSelect() && !getTo().isCanSelect()) sb.append(revoke("SELECT"));
if (getFrom().isCanInsert() && !getTo().isCanInsert()) sb.append(revoke("INSERT"));
if (getFrom().isCanUpdate() && !getTo().isCanUpdate()) sb.append(revoke("UPDATE"));
if (getFrom().isCanDelete() && !getTo().isCanDelete()) sb.append(revoke("DELETE"));
return sb.toString();
}
private String revoke(String option) {
return SqlUtil.revoke(getFrom().getTableName(), getFrom().getUserName(), option);
}
private String grant(String option) {
return SqlUtil.grant(getTo().getTableName(), getTo().getUserName(), option);
}
}