SVG이미지 색상 변경 메소드 FileController로 이동
parent
e6df49fc14
commit
f756f11bd3
@ -1,132 +0,0 @@
|
||||
package cokr.xit.fims;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import cokr.xit.foundation.Log;
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping(name = "리소스 파일 변환 처리 컨트롤러", value = "/mresources")
|
||||
public class ResourceController extends AbstractController {
|
||||
|
||||
@GetMapping(name = "이미지 파일 색상 변경", value = "/image/**")
|
||||
public void modifySvg(HttpServletRequest request, HttpServletResponse response) throws URISyntaxException, IOException, ParserConfigurationException, SAXException {
|
||||
String requestURI = request.getRequestURI().toString();
|
||||
|
||||
String filepath = requestURI.replace("/mresources","/resources");
|
||||
filepath = URLDecoder.decode(filepath);
|
||||
filepath = request.getSession().getServletContext().getRealPath(filepath);
|
||||
filepath = filepath.replace("\\","/");
|
||||
String contextPath = request.getSession().getServletContext().getContextPath();
|
||||
filepath = filepath.replace("webapp"+contextPath+"/resources", "webapp/resources");
|
||||
filepath = "file:///"+filepath;
|
||||
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
|
||||
Document document = documentBuilder.parse(filepath);
|
||||
Element root = document.getDocumentElement();
|
||||
NodeList nodeList = root.getChildNodes();
|
||||
|
||||
try {
|
||||
String modify = request.getParameter("modify");
|
||||
if(modify == null || modify.equals("")){
|
||||
|
||||
} else if(modify.equals("active")){
|
||||
updateTagFillColor(nodeList, "green");
|
||||
} else if(modify.equals("alert")){
|
||||
updateTagFillColor(nodeList, "red");
|
||||
}
|
||||
|
||||
String str4 = DocumentToString(document);
|
||||
byte[] bytes = str4.getBytes();
|
||||
|
||||
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
|
||||
response.setHeader(HttpHeaders.CONTENT_TYPE, "image/svg+xml");
|
||||
response.setHeader(HttpHeaders.CONNECTION, "keep-alive");
|
||||
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, must-revalidate");
|
||||
response.setDateHeader(HttpHeaders.EXPIRES, 0);
|
||||
response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(bytes.length));
|
||||
response.setContentType("image/svg+xml");
|
||||
|
||||
OutputStream os = response.getOutputStream();
|
||||
os.write(bytes);
|
||||
os.flush();
|
||||
os.close();
|
||||
|
||||
|
||||
} catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String DocumentToString( Document doc )
|
||||
{
|
||||
try
|
||||
{
|
||||
StringWriter clsOutput = new StringWriter( );
|
||||
Transformer clsTrans = TransformerFactory.newInstance( ).newTransformer( );
|
||||
|
||||
clsTrans.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
|
||||
clsTrans.setOutputProperty( OutputKeys.METHOD, "xml" );
|
||||
clsTrans.setOutputProperty( OutputKeys.INDENT, "yes" );
|
||||
clsTrans.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
|
||||
|
||||
clsTrans.transform( new DOMSource( doc ), new StreamResult( clsOutput ) );
|
||||
|
||||
return clsOutput.toString( );
|
||||
}
|
||||
catch( Exception ex )
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTagFillColor(NodeList nodeList, String newFillColor) {
|
||||
|
||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||
Node node = nodeList.item(i);
|
||||
NamedNodeMap namedNodeMap = node.getAttributes();
|
||||
if(namedNodeMap != null && namedNodeMap.getLength() > 0){
|
||||
for (int j = 0; j < namedNodeMap.getLength(); j++) {
|
||||
Node namedNode = namedNodeMap.item(j);
|
||||
if (namedNode.getNodeName().equalsIgnoreCase("fill")) {
|
||||
namedNode.setNodeValue(newFillColor); // Change the color of the fill attribute.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,132 @@
|
||||
package cokr.xit.fims.base;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
@Controller
|
||||
public class FileController extends cokr.xit.base.file.web.FileController {}
|
||||
public class FileController extends cokr.xit.base.file.web.FileController {
|
||||
|
||||
@GetMapping(name = "SVG 이미지 파일 색상 변경", value = "/modifySvg/**")
|
||||
public void modifySvg(HttpServletRequest request, HttpServletResponse response) throws URISyntaxException, IOException, ParserConfigurationException, SAXException {
|
||||
String requestURI = request.getRequestURI().toString();
|
||||
|
||||
String filepath = requestURI.replace("/file/modifySvg","/resources/image");
|
||||
System.out.println("log : "+filepath);
|
||||
filepath = URLDecoder.decode(filepath);
|
||||
System.out.println("log : "+filepath);
|
||||
filepath = request.getSession().getServletContext().getRealPath(filepath);
|
||||
System.out.println("log : "+filepath);
|
||||
filepath = filepath.replace("\\","/");
|
||||
System.out.println("log : "+filepath);
|
||||
String contextPath = request.getSession().getServletContext().getContextPath();
|
||||
filepath = filepath.replace("webapp"+contextPath+"/resources", "webapp/resources");
|
||||
System.out.println("log : "+filepath);
|
||||
filepath = "file:///"+filepath;
|
||||
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
|
||||
Document document = documentBuilder.parse(filepath);
|
||||
Element root = document.getDocumentElement();
|
||||
NodeList nodeList = root.getChildNodes();
|
||||
|
||||
try {
|
||||
String modify = request.getParameter("modify");
|
||||
if(modify == null || modify.equals("")){
|
||||
|
||||
} else if(modify.equals("active")){
|
||||
updateTagFillColor(nodeList, "green");
|
||||
} else if(modify.equals("alert")){
|
||||
updateTagFillColor(nodeList, "red");
|
||||
}
|
||||
|
||||
String str4 = DocumentToString(document);
|
||||
byte[] bytes = str4.getBytes();
|
||||
|
||||
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
|
||||
response.setHeader(HttpHeaders.CONTENT_TYPE, "image/svg+xml");
|
||||
response.setHeader(HttpHeaders.CONNECTION, "keep-alive");
|
||||
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, must-revalidate");
|
||||
response.setDateHeader(HttpHeaders.EXPIRES, 0);
|
||||
response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(bytes.length));
|
||||
response.setContentType("image/svg+xml");
|
||||
|
||||
OutputStream os = response.getOutputStream();
|
||||
os.write(bytes);
|
||||
os.flush();
|
||||
os.close();
|
||||
|
||||
|
||||
} catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String DocumentToString( Document doc )
|
||||
{
|
||||
try
|
||||
{
|
||||
StringWriter clsOutput = new StringWriter( );
|
||||
Transformer clsTrans = TransformerFactory.newInstance( ).newTransformer( );
|
||||
|
||||
clsTrans.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
|
||||
clsTrans.setOutputProperty( OutputKeys.METHOD, "xml" );
|
||||
clsTrans.setOutputProperty( OutputKeys.INDENT, "yes" );
|
||||
clsTrans.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
|
||||
|
||||
clsTrans.transform( new DOMSource( doc ), new StreamResult( clsOutput ) );
|
||||
|
||||
return clsOutput.toString( );
|
||||
}
|
||||
catch( Exception ex )
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTagFillColor(NodeList nodeList, String newFillColor) {
|
||||
|
||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||
Node node = nodeList.item(i);
|
||||
NamedNodeMap namedNodeMap = node.getAttributes();
|
||||
if(namedNodeMap != null && namedNodeMap.getLength() > 0){
|
||||
for (int j = 0; j < namedNodeMap.getLength(); j++) {
|
||||
Node namedNode = namedNodeMap.item(j);
|
||||
if (namedNode.getNodeName().equalsIgnoreCase("fill")) {
|
||||
namedNode.setNodeValue(newFillColor); // Change the color of the fill attribute.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue