fix : svg파일 색상 변경 기능 추가
parent
2ab6cdd943
commit
9f8cf82888
@ -0,0 +1,119 @@
|
||||
package kr.xit.fims.framework.biz.cmm.web;
|
||||
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
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.*;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
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 java.io.*;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
@Controller
|
||||
@RequestMapping(name = "", value = "/mresources")
|
||||
public class ResourceController extends AbstractController {
|
||||
@GetMapping(name = "", value = "/**")
|
||||
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("\\","/");
|
||||
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,47 +1,81 @@
|
||||
.svg-cctv-fixed:before {
|
||||
content : url("../../../../image/fims/framework/고정형cctv.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/고정형cctv.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/고정형cctv.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/고정형cctv.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-cctv-drive:before {
|
||||
content : url("../../../../image/fims/framework/이동형cctv.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/이동형cctv.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/이동형cctv.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/이동형cctv.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-crackdown-road:before {
|
||||
content : url("../../../../image/fims/framework/도보단속.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/도보단속.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/도보단속.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/도보단속.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-crackdown-minwon:before {
|
||||
content : url("../../../../image/fims/framework/민원(즉시단속).svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-target-lvy:before {
|
||||
content : url("../../../../image/fims/framework/등록대상.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/등록대상.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/등록대상.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/등록대상.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-target-transfer:before {
|
||||
content : url("../../../../image/fims/framework/이첩대상.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/이첩대상.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/이첩대상.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/이첩대상.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-sendstat-guide:before {
|
||||
content : url("../../../../image/fims/framework/계도장 발송현황.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-sendstat-before:before {
|
||||
content : url("../../../../image/fims/framework/사전통보 발송현황.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-sendstat-nop:before {
|
||||
content : url("../../../../image/fims/framework/고지서 발송현황.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-opn-rcp:before {
|
||||
content : url("../../../../image/fims/framework/접수.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/접수.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/접수.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/접수.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-opn-decision:before {
|
||||
content : url("../../../../image/fims/framework/수용_미수용.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/수용_미수용.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/수용_미수용.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/수용_미수용.svg?modify=alert");
|
||||
}
|
||||
|
||||
.svg-opn-selfdrop:before {
|
||||
content : url("../../../../image/fims/framework/자진취하.svg");
|
||||
--bs-origin : url("../../../../../mresources/image/fims/framework/자진취하.svg");
|
||||
--bs-active : url("../../../../../mresources/image/fims/framework/자진취하.svg?modify=active");
|
||||
--bs-alert : url("../../../../../mresources/image/fims/framework/자진취하.svg?modify=alert");
|
||||
}
|
||||
|
||||
[class^=svg-]:before {
|
||||
content : var(--bs-origin);
|
||||
}
|
||||
[class^=svg-].active-svg:before {
|
||||
content : var(--bs-active);
|
||||
}
|
||||
[class^=svg-].alert-svg:before {
|
||||
content : var(--bs-alert);
|
||||
}
|
Loading…
Reference in New Issue