Umožněn upload obrázku podpisu uživatele. Menu Nastavení -> Uživatelské
nastavení. refs #132multitenant
parent
d454c211f8
commit
d108f4a070
@ -0,0 +1,18 @@
|
||||
package info.bukova.isspst.storage;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface FileStorage {
|
||||
|
||||
// public String getRootPath();
|
||||
public void saveFile(byte[] data, String fileName);
|
||||
public void saveFile(File file, String path);
|
||||
public void removeFile(String fileName);
|
||||
public void moveFile(String source, String destination);
|
||||
public void createDirectory(String dir);
|
||||
public byte[] fileData(String fileName);
|
||||
public File file(String fileName);
|
||||
public boolean dirExists(String path);
|
||||
public String serverPath(String fileName);
|
||||
|
||||
}
|
@ -0,0 +1,146 @@
|
||||
package info.bukova.isspst.storage;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
public class LocalFileStorage implements FileStorage {
|
||||
|
||||
private String rootPath;
|
||||
private ServletContext context;
|
||||
|
||||
public void setRootPath(String rootPath) {
|
||||
this.rootPath = rootPath;
|
||||
}
|
||||
|
||||
public void setContext(ServletContext ctx) {
|
||||
this.context = ctx;
|
||||
}
|
||||
|
||||
private String getFullPath() {
|
||||
return context.getRealPath(rootPath) + File.separator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveFile(byte[] data, String fileName) {
|
||||
|
||||
File file = new File(getFullPath() + fileName);
|
||||
FileOutputStream os = null;
|
||||
try {
|
||||
os = new FileOutputStream(file);
|
||||
os.write(data);
|
||||
os.flush();
|
||||
os.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (os != null) {
|
||||
os.flush();
|
||||
os.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new StorageException("Cannot close stream", e.getCause());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveFile(File file, String path) {
|
||||
File dest = new File(getFullPath() + path + File.pathSeparator + file.getName());
|
||||
FileOutputStream fos = null;
|
||||
|
||||
try {
|
||||
fos = new FileOutputStream(dest);
|
||||
fos.write(fileData(file.getName()));
|
||||
fos.flush();
|
||||
fos.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new StorageException("Cannot move file: " + file.getName(), e.getCause());
|
||||
} catch (IOException e) {
|
||||
throw new StorageException("Cannot move file: " + file.getName(), e.getCause());
|
||||
} finally {
|
||||
if (fos != null) {
|
||||
try {
|
||||
fos.flush();
|
||||
fos.close();
|
||||
} catch (IOException e) {
|
||||
throw new StorageException("Cannot close stream", e.getCause());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFile(String fileName) {
|
||||
File f = new File(getFullPath() + fileName);
|
||||
if (!f.delete()) {
|
||||
throw new StorageException("Cannot delete file: " + getFullPath()
|
||||
+ fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] fileData(String fileName) {
|
||||
File f = new File(getFullPath() + fileName);
|
||||
byte[] out = new byte[(int) f.length()];
|
||||
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(f);
|
||||
fis.read(out);
|
||||
fis.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new StorageException("File cannot be found: " + fileName, e.getCause());
|
||||
} catch (IOException e) {
|
||||
throw new StorageException("Cannot read file: " + fileName, e.getCause());
|
||||
} finally {
|
||||
if (fis != null) {
|
||||
try {
|
||||
fis.close();
|
||||
} catch (IOException e) {
|
||||
throw new StorageException("Cannot close stream", e.getCause());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File file(String fileName) {
|
||||
return new File(getFullPath() + fileName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveFile(String source, String destination) {
|
||||
saveFile(new File(getFullPath() + source), destination);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createDirectory(String dir) {
|
||||
File f = new File(getFullPath() + dir);
|
||||
if (!f.mkdir()) {
|
||||
throw new StorageException("Cannot create directory: "
|
||||
+ getFullPath() + dir);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dirExists(String path) {
|
||||
File f = new File(getFullPath() + path);
|
||||
return f.exists() && f.isDirectory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serverPath(String fileName) {
|
||||
return context.getRealPath(rootPath + File.separator + fileName);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package info.bukova.isspst.storage;
|
||||
|
||||
import info.bukova.isspst.services.IsspstException;
|
||||
|
||||
public class StorageException extends IsspstException {
|
||||
|
||||
private static final long serialVersionUID = -1303880908451845756L;
|
||||
|
||||
public StorageException(String reason) {
|
||||
super(reason);
|
||||
}
|
||||
|
||||
public StorageException(String reason, Throwable cause) {
|
||||
super(reason, cause);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package info.bukova.isspst.ui.settings;
|
||||
|
||||
import info.bukova.isspst.data.UserSettingsData;
|
||||
import info.bukova.isspst.services.users.UserService;
|
||||
import info.bukova.isspst.storage.FileStorage;
|
||||
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.zkoss.bind.annotation.BindingParam;
|
||||
import org.zkoss.bind.annotation.Command;
|
||||
import org.zkoss.bind.annotation.ContextParam;
|
||||
import org.zkoss.bind.annotation.ContextType;
|
||||
import org.zkoss.bind.annotation.Init;
|
||||
import org.zkoss.bind.annotation.NotifyChange;
|
||||
import org.zkoss.zk.ui.event.UploadEvent;
|
||||
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||
import org.zkoss.zul.Window;
|
||||
|
||||
public class UserSettingsVM {
|
||||
|
||||
@WireVariable
|
||||
private UserService userService;
|
||||
@WireVariable
|
||||
private FileStorage storage;
|
||||
private UserSettingsData settings;
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
settings = userService.getUserSettings();
|
||||
}
|
||||
|
||||
public UserSettingsData getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"settings", "signatureImg"})
|
||||
public void uploadSignature(@ContextParam(ContextType.TRIGGER_EVENT) UploadEvent upEvent) {
|
||||
int i = upEvent.getMedia().getName().lastIndexOf(".");
|
||||
String fileName = "SignatureImageFile_" + userService.getCurrent().getUsername() + upEvent.getMedia().getName().substring(i);
|
||||
|
||||
storage.saveFile(upEvent.getMedia().getByteData(), fileName);
|
||||
settings.setSignatureFile(fileName);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange("signatureImg")
|
||||
public void removeSignature() {
|
||||
settings.setSignatureFile(null);
|
||||
}
|
||||
|
||||
@Command
|
||||
public void save(@BindingParam("window") Window window) {
|
||||
userService.setUserSettings(settings);
|
||||
userService.update(userService.getCurrent());
|
||||
onClose();
|
||||
window.detach();
|
||||
}
|
||||
|
||||
@Command
|
||||
public void onClose() {
|
||||
if (userService.getUserSettings().getSignatureFile() == null && settings.getSignatureFile() != null) {
|
||||
storage.removeFile(settings.getSignatureFile());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isCanSave() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public RenderedImage getSignatureImg() {
|
||||
if (settings.getSignatureFile() == null || settings.getSignatureFile().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return ImageIO.read(storage.file(settings.getSignatureFile()));
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1 @@
|
||||
dummy file
|
@ -0,0 +1,30 @@
|
||||
<?page title="UserSettings" contentType="text/html;charset=UTF-8"?>
|
||||
<zk>
|
||||
<window id="editWin" border="normal"
|
||||
closable="true"
|
||||
apply="org.zkoss.bind.BindComposer"
|
||||
viewModel="@id('vm') @init('info.bukova.isspst.ui.settings.UserSettingsVM')"
|
||||
onClose="@command('onClose')"
|
||||
width="700px">
|
||||
<caption
|
||||
zclass="form-caption"
|
||||
label="${labels.UserSettings}" />
|
||||
|
||||
<vbox>
|
||||
<label value="Podpis:"/>
|
||||
<hbox>
|
||||
<button label="Nahrát obrázek podpisu"
|
||||
upload="true,maxsize=600,accept=image/*"
|
||||
onUpload="@command('uploadSignature')"
|
||||
sclass="nicebutton"/>
|
||||
<div width="400px" height="110px" style="border: 1px solid black;">
|
||||
<image height="100px" content="@load(vm.signatureImg)"/>
|
||||
</div>
|
||||
</hbox>
|
||||
<button label="Smazat" onClick="@command('removeSignature')" sclass="nicebutton"/>
|
||||
</vbox>
|
||||
|
||||
<include src="/app/formButtons.zul"/>
|
||||
|
||||
</window>
|
||||
</zk>
|
Loading…
Reference in New Issue